Recursion 需要一个关于递归的简短解释吗
我有一个关于Java中递归的快速问题。代码如下: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
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以外我什么都有。非常感谢!