0

我有一组嵌套函数,我将在for-loop. 但for-loop不会处理所有值。

片段如下:

.....
.....
for(i=0;i<5;i++)
{
 A();
}
.....
....

A()
{
 for(j=0;j<5;j++)
 {
  B();
  if j false then return;
 }
 return;
}

B()
{
 for(k=0;k<5;k++)
 {
  A();
  if k false then return;
 }
 return;
}

在上面的代码中,for-loopinB()不接受所有值,它只接受一个值,然后停止循环。B()'s for 循环中的问题是什么?如何处理所有值?

4

3 回答 3

3

在第一个循环的第一次迭代中A()被调用。在该循环的第一次迭代中B()被调用。在B's的第一次迭代中A()被调用。哪个调用B()哪个调用A()……直到堆栈溢出。

您已经创建了一对相互递归的函数,没有任何条件来触底(停止)递归。

A从和中删除循环B

A() {
  B();
}
B() {
  A();
}

更直接地说明问题。

于 2014-03-11T10:12:52.743 回答
0

你认为它没有取第二个值。但实际上它会抛出类型异常。堆栈溢出

于 2014-03-11T10:12:57.540 回答
0

不确定“停止循环”是什么意思-我认为这会引发异常或其他什么?

看它; 电话是这样的:

Call A() Five times each time..
   calling B() five times, each time...
       calling A() five times...                 
           calling B() five times, each time...
               calling A() five times... 
                   etc.. (which goes back to the top)

这将递归(反复调用自身“向内”),直到内存不足,然后崩溃并抛出StackOverflowException.

注意:只会调用每个循环中的第一个调用,因为每次进行这样的调用时,都会启动一个新的循环。这可能就是为什么在您看来只处理第一个值的原因。

于 2014-03-11T10:17:18.453 回答