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

3

我有一个调用自身递归的函数:

public int foo(int num, int counter)
{
    if (num > 0)
    {
        counter++;
        num--;
        foo(num, counter);
    }

    return counter;
}

我从主函数中调用带有以下参数的函数:

System.out.println(bst.foo(3, 0));

我期望这样的行为:

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
}

但是函数总是返回1,我不知道为什么。
1个回答

8

你传递的是counter,而不是变量本身。你的递归调用无法修改外部调用中counter的值。Java采用按值传递。

一种可能的解决方案是执行以下操作:

 counter = foo(num, counter);

在递归调用中。或者,更简单的方法是只使用return foo(num, counter),因为之后你对counter没有任何操作,除了返回它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接