CSDN|漫画:为什么程序员喜欢使用 0 ≤ i < 10 左闭右开形式写 for 循环?
本文插图
作者 | 漫话编程 来源 | 漫话编程(ID:mhcoding)
本文插图
本文插图
本文插图
本文插图
本文插图
本文插图
本文插图
当我们想要写一个循环体 , 期望执行10次的时候 , 我们会使用以下方式:for (int i=0; i<10; i++){}可以看到 , 为了保证循环10次 , 我们定义了一个整数变量从0开始 , 然后循环10次 , 结束条件是i < 10 。其实这个本质就是使用了0 ≤ i < 10这种表达形式 。之所以很多人都这么写 , 有一个最主要的原因就是刚开始学编程的时候 , 老师都是这么教的…【CSDN|漫画:为什么程序员喜欢使用 0 ≤ i < 10 左闭右开形式写 for 循环?】
本文插图
本文插图
本文插图
本文插图
关于这个问题 , 其实还有一位伟大的数学家曾经讨论过他的合理性 。这个人就是Dijkstra , 他也是离散数学中应用广泛的最短路径算法的提出者 , 并且还提出了银行家算法 。他在1982年发表了一篇说明《Why numbering should start at zero》 , 这里面有部分内容阐述了这个观点 。他首先提出一个问题 , 让我们通过一个条件表达式表示 2,3,4,5,6,7,8,9,10,11,12 这11个数字 , 其实一般有以下四种写法:
- a) 2 ≤ i < 13
- b) 1 < i ≤ 12
- c) 2 ≤ i ≤ 12
- d) 1 < i < 13
本文插图
本文插图
本文插图
我们其实可以观察到 , a) 和 b)有个优点 , 上下边界的相减得到的差 , 正好等于子序列的长度 , 即13-2 = 12-1 = 11; 这样的写法可以让我们快速知道这个表示表达式中一共包含多少个自然数 。当然 , 这并不是正菜 , 只是开胃而已… 接下来 , Dijkstra分别从表达式的上下界讨论了到底使用≤还是<更合理 。首先 , 他论证了一下表达式的下界使用哪种形式合理 。他认为 , 当我们想要表达自然数2-12的时候 , 如果使用1 < i作为这个序列的下界的话 , 这个下界的起始值进入了非自然数的区域 。 而使用2 ≤ i , 那么就可以严格的保证这个下界就是一个自然数2。 所以 , 他认为下界使用≤更加合理 。符合这种形式的就是a) 和 c)两种 。那么a) 和 c)还有一个区别 , 就是上界一个用了≤一个用了< , 那该使用哪种方式更加合适呢? Dijkstra提出 , 如果想要表达一个空序列 , 使用a) 形式可以很容易的表达 , 如 0<= i <0就可以表示一个空序列 。但是如果上界和下界都用<= 就无法表示了 , 除非用1 <= i <= 0 , 但是这种形式就很不合逻辑 。所以 , 综上 , 他认为a) 2 ≤ i < 13 这种表达方式更加合理一些 。也就是说 , 使用左闭右开的形式定义表达式合理也更加优雅!
推荐阅读
- 情感|华为今天如此成功,看一下任正非的岳父是谁,你就知道为什么
- 华为手机|泪奔!等等党的心酸,为什么有些手机它偏不降价?
- CSDN|由 Apache 说开,中国开源项目已经走向世界!
- 36氪|为什么说远程办公也许会毁了硅谷?
- 硅谷|为什么说远程办公也许会毁了硅谷?
- 科技造就未来|Apple为什么要使用ARM?为什么不从头开始?
- |为什么我店铺流量狂掉?淘宝竞争这么激烈还能不能做?
- 科学,探月|嫦娥五号年内升空 我们为什么要去月亮上“挖土”?
- 科学|嫦娥五号年内升空 我们为什么要去月亮上“挖土”?
- 华为手机|千元机中,为什么很多消费者首选红米?