Java 递归与循环

Java 递归与循环,java,c++,loops,recursion,Java,C++,Loops,Recursion,有件事我不太确定 假设我们有一个名为foo的函数,它看起来像 void foo(Parameter a1) { if(condition == true) return; // jumping out of recursion for(int i = 0; i < array.length; i++) { if(contion == true) foo(a1); // calls itse

有件事我不太确定

假设我们有一个名为foo的函数,它看起来像

void foo(Parameter a1) {
   if(condition == true)
       return;             // jumping out of recursion

   for(int i = 0; i < array.length; i++) {

      if(contion == true)
          foo(a1);         // calls itself

      ...
   }
   ...
}
void foo(参数a1){
如果(条件==真)
return;//跳出递归
for(int i=0;i
我想知道的是,当函数foo()调用自己并说这种情况会发生几次时。计数器i是否总是从0开始?我的意思是每次函数被函数本身调用时


如果有人能给我解释一下,我将不胜感激。

是的,每次你调用
foo
它都会启动一个全新的for循环,因此使用新的循环变量
I

foo
的每次调用都将从“fresh”开始,因此是的,循环将始终从
0
开始。如果这不是你想要的,那么你必须通过一个“从哪里开始”的论点

每个函数调用上的局部作用域变量将是不同的引用,因此它们将包含不同的值/对象


通常通过引用递归函数/方法来传递参数,以便在所有递归中共享其值。

递归并不特殊。它将与第一次迭代中的操作相同,只是参数不同。与其他方法一样,每个方法的其余部分都是在递归调用完成后完成的。这样,for循环将恢复,并且两个yadda(…)将在每个递归级别执行。

Yes。当然这就是我的想法。每一个电话都会重新开始。这只是堆栈和函数的参数有什么不同。请先阅读。简而言之,答案是肯定的,但是即使没有递归,答案也仍然是肯定的。记住,I的范围不是FoO函数,而是声明的for循环。也注意到,在C++中,可以使用本地静态变量,这些变量保持函数每次调用的值。无论如何,也许您应该使用SML编程语言来训练递归编程:)