【发布时间】:2018-06-03 11:40:02
【问题描述】:
我对 Java 如何运行此特定代码感到困惑。我对斐波那契数列感到满意,但不完全了解如何让我的思想了解这种特定方法的运行方式。所以很明显,如果 n 为 0,我将返回 0,如果 n 为 1,则返回 1。现在让我们说我为 n 传递了 3。我们返回 fib(2) + fib(1)。如果它一开始就没有计算过,它怎么知道 fib(2) 是什么?它是否再次遍历整个函数以找出 fib(2) 是什么?它什么时候停止?我的心都要炸了。
public static int fib(int n){
if (n == 0){
return 0;
}
else if (n == 1){
return 1;
}
return (fib(n-1) + fib(n-2));
}
【问题讨论】:
-
这个函数调用自己。很多。
-
"是否会再次遍历整个函数以找出 fib(2) 是什么?" 是的,这就是递归。 "什么时候停止?" 当满足不调用方法本身的条件时——在本例中为
n == 0 || n == 1时。 -
我强烈建议您查看重复问题的答案。尤其是 chro 的答案,在我看来是最好的答案,但目前是页面上投票第二高的答案。