这是一个核心问题 ,请不要说关于语法或语义,问题是两者之间的实际区别是什么
WHILE
循环和FOR
循环,for循环中编写的所有内容都可以用while循环完成,那么为什么要两个循环呢?
这是在剑桥大学的一次研讨会上提出的。所以我认为我们必须在性能开销和 WC 复杂性方面进行解释。
我认为我们必须按照弗洛伊德霍尔的逻辑
这是一个核心问题 ,请不要说关于语法或语义,问题是两者之间的实际区别是什么
WHILE
循环和FOR
循环,for循环中编写的所有内容都可以用while循环完成,那么为什么要两个循环呢?
这是在剑桥大学的一次研讨会上提出的。所以我认为我们必须在性能开销和 WC 复杂性方面进行解释。
我认为我们必须按照弗洛伊德霍尔的逻辑
就性能开销而言,这将取决于您使用的编译器和语言。
它们之间的主要区别在于,for 循环在迭代某个集合时更易于阅读,而 while 循环在评估特定条件或布尔标志时更易于阅读。
两个循环结构之间的唯一区别是能够在循环头中进行for
循环前初始化和循环后更改。两者之间没有性能差异
while (condition) {
...
}
和
for ( ; condition ; ) {
...
}
结构体。为了方便和可读性,添加了替代方案,没有其他含义。
不同之处在于for()
循环将多个步骤压缩为一行。最终,所有答案都会以这种方式归结为语法或语义,所以不可能有一个真正让你满意的答案。
循环仅说明循环终止的while()
条件,而for()
循环可以规定要测量的变量以及除此之外的计数器。
(实际上,for()
循环是非常通用的,在它们的声明中可以发生很多事情以使它们非常漂亮,但是上面的语句总结了几乎所有for()
你会看到的循环,即使在生产环境中也是如此。)
两者之间的一个偶尔相关的区别是,while 循环可以比 for 循环施加更复杂的条件
循环通过可预测大小的集合时,最好使用 FOR 循环
我想这会被认为是语法上的,但我认为它驳斥了 for 循环可以做 while 循环可以做的任何事情的概念,尽管反过来确实是正确的
显然不需要两个循环,你只需要一个。事实上,许多教科书都考虑了一种语言(通常命名为Imp
),它在while for
之前while
使用初始化语句去糖。
话虽如此,如果您尝试计算循环不变量的差异,以及这两个循环的 Hoare 逻辑中的相关规则,它们会因为 init 块而略有不同。既然这看起来像家庭作业,我会让你弄清楚细节。
所以答案是:“它让事情变得更容易,在语法和证明方面,但它只是装饰性的,出于所有目的,你真的只需要一个......”
到目前为止,其他答案都没有指出我认为区别的真正重要部分是针对您的问题:这可能是他们用 Hoare 连接词改变了一些东西......
另外,请注意,基于 Hoare 逻辑推测性能是愚蠢的。如果您关心语义,您的教授可能不会在乎或想听听性能:-)
一切都可以用 if-goto 语句来完成。那么为什么有任何循环呢?它是一种语法糖,可以让开发人员的生活更轻松,并允许编写结构更好(更小、更易读)的代码。它与性能无关