Recursion 斐波那契序列它是如何工作的
我对Java是如何运行这个特定代码感到困惑。我对斐波那契数列很满意,但并不完全了解如何让我的头脑了解这个特定方法的运行方式。很明显,如果n为0,我返回0,如果n为1,我返回1。现在让我们假设我通过了3个n。我们返回fib(2)+fib(1)。如果它一开始从未计算过fib(2),它怎么知道fib(2)是什么?它是否再次通过整个函数来找出fib(2)是什么?什么时候停?我的心要爆炸了Recursion 斐波那契序列它是如何工作的,recursion,fibonacci,Recursion,Fibonacci,我对Java是如何运行这个特定代码感到困惑。我对斐波那契数列很满意,但并不完全了解如何让我的头脑了解这个特定方法的运行方式。很明显,如果n为0,我返回0,如果n为1,我返回1。现在让我们假设我通过了3个n。我们返回fib(2)+fib(1)。如果它一开始从未计算过fib(2),它怎么知道fib(2)是什么?它是否再次通过整个函数来找出fib(2)是什么?什么时候停?我的心要爆炸了 public static int fib(int n){ if (n == 0){ re
public static int fib(int n){
if (n == 0){
return 0;
}
else if (n == 1){
return 1;
}
return (fib(n-1) + fib(n-2));
}
您正在体验编程/数学中最酷的概念之一,称为递归。它可以是美丽的,但也可以是诅咒。在开始学习递归函数时,我也被这些编译过的自调用怪物逼疯了,但过了一段时间,我意识到有多少问题可以用递归更容易地解决。回到你的问题上来 所以根据维基百科,斐波那契序列是 “斐波那契数的序列Fn由递推关系定义: n是当前的数字 所以在开始的时候我们打个比方
fib(3);
在它调用的方法中
fib(2);
然后在fib(2)中,它调用
这将返回1(因为if),所以这将返回fib(2),fib 2调用fib(0)的结果为0
所以fib(2)返回1
因为fib(3)被其他方法打断了,它仍然在返回点上。现在看起来是这样的
return 1 + fib(3 - 2)
fib(1)返回1 so
fib在末尾返回2
这有点难以解释,但我想你很快就会明白的
提示:当你不能理解某些东西是如何执行的时,使用调试器。它在可视化数据和算法方面帮助很大。它帮助你更快地理解。
fib(1)此函数调用自身。Lots。“它是否再次遍历整个函数以找出fib(2)是什么?”是的,这就是递归。它何时停止?“当不调用方法本身的条件满足时-在这种情况下,即
n==0 | | n==1
时。我强烈建议您查看重复问题的答案。特别是chro的答案,这是我认为最好的答案,但目前是该页面上投票率第二高的答案。完美的解释,非常感谢你。。。把代码写在纸上,这比在我脑子里想的要清楚得多。节日快乐。
fib(1)
return 1 + fib(3 - 2)