for循环不处理所有值

时间:2014-03-11 10:08:44

标签: c# for-loop nested-function

我有一组嵌套函数,我将在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-loop中的B()不会获取所有值,只需要一个值, 然后停止循环。 B() for循环中的问题是什么?如何处理所有值?

3 个答案:

答案 0 :(得分:3)

在第一次循环的第一次迭代中调用A()。在该循环的第一次迭代中,调用B()。在B的第一次迭代中,调用了A()。哪个调用B()调用A() ...直到堆栈溢出。

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

AB

中删除循环
A() {
  B();
}
B() {
  A();
}

更直接地显示问题。

答案 1 :(得分:0)

你认为它没有取第二个价值。但实际上它会抛出异常类型。的计算器

答案 2 :(得分: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

注意:只会调用每个循环中的第一个调用,因为每次进行此类调用时,都会启动一个新循环。这可能就是为什么你似乎只处理了第一个值。