Recursion 需要一个关于递归的简短解释吗

Recursion 需要一个关于递归的简短解释吗,recursion,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 stat

我有一个关于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。有人能给我一个快速的演练让我明白吗? 提前谢谢

首先,执行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

希望这有帮助首先,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


希望这有助于生成演练,将此代码粘贴到IDE中,并在调试模式下逐行浏览。或者,用纸和铅笔来运行它。顺便说一句:递归在这里没有什么神秘之处
g(x)
的工作原理始终相同,无论是从
g
调用还是从其他地方调用。因此,您在这里不了解的是方法、算术或控制流是如何工作的。Ingo,您是对的,我的计算一直都是错误的,这就是为什么结果对我来说不清楚的原因。要生成演练,请将此代码粘贴到IDE中,并在调试模式下逐行遍历。或者,用纸和铅笔来运行它。顺便说一句:递归在这里没有什么神秘之处
g(x)
的工作原理始终相同,无论是从
g
调用还是从其他地方调用。所以你在这里不明白的是方法、算术或控制流是如何工作的。Ingo,你是对的,我的计算一直都是错误的,这就是为什么结果对我来说是模糊的。它做到了!我一直都在计算错误,这就是为什么除了9以外我什么都有。非常感谢!是的!我一直都在计算错误,这就是为什么除了9以外我什么都有。非常感谢!