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

4

1 回答 1

8

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

一种可能的解决方案是

 counter = foo(num, counter);

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

于 2013-02-07T21:22:01.880 回答