当前位置:首页 > 公众号精选 > 中兴文档
[导读]当我们想要写一个循环体,期望执行10次的时候,我们会使用以下方式: for (int i=0; i<10; i++){ } 可以看到,为了保证循环10次,我们定义了一个整数变量从0开始,然后循环10次,结束条件是i < 10。 其实这个本质就是使用了 0 ≤ i < 10 这种表达形式。 之所

当我们想要写一个循环体,期望执行10次的时候,我们会使用以下方式:
for (int i=0; i<10; i++){

}
可以看到,为了保证循环10次,我们定义了一个整数变量从0开始,然后循环10次,结束条件是i < 10。
其实这个本质就是使用了 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循环的时候可能会用到的一些表示式,那这四种写法有没有好坏之分呢?

答案是有的。

我们其实可以观察到,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 这种表达方式更加合理一些。
也就是说,使用左闭右开的形式定义表达式合理也更加优雅!




我们是一群平均从业年限5+的通信专业工程师。

关注我们,带你了解通信世界的精彩!

你点的每个在看,我都认真当成了喜欢



免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭