在Java中递归传递计数器变量

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,我不知道为什么.

Lou*_*man 8

你传递的价值counter,不是变量本身.您的递归调用无法修改counter外部调用的值.Java是按值传递的.

一种可能的解决方案是做

 counter = foo(num, counter);
Run Code Online (Sandbox Code Playgroud)

在递归调用中.或者,或者,只是return foo(num, counter),因为counter除了返回之外你不做任何事情.