我知道while循环可以做for循环可以任何东西,但一个for循环做任何事情while循环可以吗?
请提供一个例子。
我知道while循环可以做for循环可以任何东西,但一个for循环做任何事情while循环可以吗?
请提供一个例子。
是的,很容易。
while (cond) S;
for(;cond;) S;
的while
循环和经典for
循环是可以互换的:
for (initializer; loop-test; counting-expression) {
…
}
initializer
while (loop-test) {
…
counting-expression
}
如果你有一个固定的边界和步骤,并且不允许在循环体循环变量的修改,然后循环对应于原始递归函数。
从理论的角度来看,这些都是比一般的弱while循环,例如,你不仅可以用这样的计算阿克曼函数for循环。
如果你能提供一个上限为条件在一个while循环,成为真正的,你可以将其转换为一个循环。 这表明,在实际意义上是没有区别的,因为你可以很容易地提供一个天文数字的约束,说比宇宙的寿命更长。
其基本前提是问题的是, while
循环可以被改写为for
循环。 如
init;
while (conditional) {
statement;
modify;
}
被改写为;
for ( init; conditional; modify ) {
statements;
}
这个问题的前提是在init
和modify
语句被移动到 for
循环,并for
循环不仅仅是出于,
init;
for (; conditional; ) {
modify;
}
但是,这是一个有趣的问题。 这是不真实的,因为内部流程控制其中的statements;
可以包括。 从C语言程序设计:一种现代方法,第二版 ,你可以看到在第119页的例子,
n = 0;
sum = 0;
while ( n < 10 ) {
scanf("%d", &i);
if ( i == 0 )
continue;
sum += i;
n++;
}
这不能被改写为for
循环一样,
sum = 0;
for (n = 0; n < 10; n++ ) {
scanf("%d", &i);
if ( i == 0 )
continue;
sum += i;
}
为什么?因为“当i
等于0
,则原始循环不增加n
,但新的循环一样。
而且,基本上可以归结为抓,
内部显式流量控制while
环路允许执行一个for
循环(使用内部init;
和modify;
语句)无法重新创建。
While loop
并没有这么高的灵活性作为一个for loop
具有和循环比while循环更易读。 我将证明我的观点用一个例子。 for循环可以有形式:
for(int i = 0, j = 0; i <= 10; i++, j++){
// Perform your operations here.
}
while循环不能像上面的for循环,今天最现代的语言中使用允许for each loop
为好。
在我看来,我可能有偏差,请原谅的是,人们不应该使用while loop
,只要它是可以编写代码相同的for loop
。
在C类语言,你可以声明for循环像这样:
for(; true;)
{
if(someCondition)
break;
}
在语言,其中for
更为严格,无限循环将是需要的情况下while
循环。