漫话:为什么程序员喜欢使用0 ≤ i < 10这种左闭右开的形式写for循环?
时间:2020-07-09 09:20:22
手机看文章
扫描二维码
随时随地手机看文章
[导读]当我们想要写一个循环体,期望执行10次的时候,我们会使用以下方式: for (int i=0; i<10; i++){ } 可以看到,为了保证循环10次,我们定义了一个整数变量从0开始,然后循环10次,结束条件是i < 10。 其实这个本质就是使用了 0 ≤ i < 10 这种表达形式。 之所
for (int i=0; i<10; i++){
}
0 ≤ i < 10
这种表达形式。
关于这个问题,其实还有一位伟大的数学家曾经讨论过他的合理性。
这个人就是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
这几种也是我们在写for循环的时候可能会用到的一些表示式,那这四种写法有没有好坏之分呢?
答案是有的。
13-2 = 12-1 = 11
; 这样的写法可以让我们快速知道这个表示表达式中一共包含多少个自然数。
≤
还是
<
更合理。
1 < i
作为这个序列的下界的话,这个下界的起始值进入了非自然数的区域。而使用
2 ≤ i
,那么就可以严格的保证这个下界就是一个自然数2 。所以,他认为下界使用
≤
更加合理。
≤
一个用了
<
,那该使用哪种方式更加合适呢?
0<= i <0
就可以表示一个空序列。
<=
就无法表示了,除非用
1 <= i <= 0
,但是这种形式就很不合逻辑。
a) 2 ≤ i < 13
这种表达方式更加合理一些。
我们是一群平均从业年限5+的通信专业工程师。
关注我们,带你了解通信世界的精彩!
你点的每个在看,我都认真当成了喜欢
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!