需要关于递归的简短说明

时间:2013-11-28 11:17:40

标签: recursion

我有一个关于Java递归的快速问题。这是代码:

public static void main(String[] args) {
    int n = Integer.parseInt(args[0]);
    System.out.println(f(g(n)));
}

public static int f(int x) {
    if (x == 0) return 1;
    else return f(x / 2) + g(x - 1);
    }
public static int g(int x) {
    if (x == 0) return 2;
    else return g(x / 2) + f(x - 1);
}

例如:f(g(1))的函数值为9,f(g(2))的函数值为30。 现在,我是递归的新手,我理解“简单”递归如何使用一个函数,但我不明白f(g(1))如何等于9.有人能给我一个快速的演练让我明白吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

首先,执行g(1)。

g(1) => return g(1/2)+f(1-1) = return g(0) + f(0)

g(0)= 2,f(0)= 1

g(1)返回3

所以,现在执行f(3)。

f(3) => return f(3/2) + g(2) = return f(1) + g(2)

f(1) = return f(0) + g(0) = 3

g(2) = return g(1) + f(1), which we know to be 3 + 3. 

所以,g(2)= 6,f(1)= 3.因此,f(3)= 9

希望这会有所帮助