我有一个关于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.有人能给我一个快速的演练让我明白吗? 提前谢谢!
答案 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
希望这会有所帮助