不能被写为一个for循环while循环的实施例(Example of a while loop th

2019-07-20 18:15发布

我知道while循环可以做for循环可以任何东西,但一个for循环做任何事情while循环可以吗?

请提供一个例子。

Answer 1:

是的,很容易。

while (cond) S;

for(;cond;) S;


Answer 2:

while循环和经典for循环是可以互换的:

for (initializer; loop-test; counting-expression) {
    …
}

initializer
while (loop-test) {
    …
    counting-expression
}


Answer 3:

如果你有一个固定的边界和步骤,并且不允许在循环体循环变量的修改,然后循环对应于原始递归函数。

从理论的角度来看,这些都是比一般的弱while循环,例如,你不仅可以用这样的计算阿克曼函数for循环。

如果你能提供一个上限为条件在一个while循环,成为真正的,你可以将其转换为一个循环。 这表明,在实际意义上是没有区别的,因为你可以很容易地提供一个天文数字的约束,说比宇宙的寿命更长。



Answer 4:

用C

其基本前提是问题的是, while循环可以被改写为for循环。 如

init;
while (conditional) {
  statement;
  modify;
}

被改写为;

for ( init; conditional; modify ) {
  statements;
}

这个问题的前提是在initmodify语句被移动 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;语句)无法重新创建。



Answer 5:

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



Answer 6:

在C类语言,你可以声明for循环像这样:

for(; true;)
{
    if(someCondition)
       break;
}

在语言,其中for更为严格,无限循环将是需要的情况下while循环。



文章来源: Example of a while loop that can't be written as a for loop