Edw*_*its 3 java recursion counter
我有一个递归调用自己的函数:
public int foo(int num, int counter)
{
if (num > 0)
{
counter++;
num--;
foo(num, counter);
}
return counter;
}
Run Code Online (Sandbox Code Playgroud)
从main方法我调用函数:
System.out.println(bst.foo(3, 0));
Run Code Online (Sandbox Code Playgroud)
我期待这样的行为:
public int foo(int num, int counter)
{
// counter = 0
// num = 3
if (num > 0)
{
counter++; // counter = 1
num--; // num = 2
if (num > 0)
{
counter++; // counter = 2
num--; // num = 1
if (num > 0)
{
counter++; // counter = 3
num--; // num = 0
if (num > 0)
{
// don't execute as num = 0
}
}
}
}
return counter; // return 3
}
Run Code Online (Sandbox Code Playgroud)
但功能总是返回1,我不知道为什么.
你传递的价值的counter,不是变量本身.您的递归调用无法修改counter外部调用的值.Java是按值传递的.
一种可能的解决方案是做
counter = foo(num, counter);
Run Code Online (Sandbox Code Playgroud)
在递归调用中.或者,或者,只是return foo(num, counter),因为counter除了返回之外你不做任何事情.
| 归档时间: |
|
| 查看次数: |
2177 次 |
| 最近记录: |