首先,我必须告诉您, 此递归版本具有巨大的指数成本 。一旦了解了它的工作原理,对您的建议就是学习尾部递归性,编写 尾部递归 解决方案,
迭代 解决方案,并将它们与当前方法进行比较,以获取较高的“数字”值。
然后,您的函数基本上使用斐波那契数列的数学定义:
f0 = 1, f1 = 1, fn = fn-1 + fn-2 for all n >= 2
例如,如果我们调用fibonacci(3),则将返回fibonacci(2)+
fibonacci(1)。fibonacci(2)将首先执行,并返回fibonacci(1)+
fibonnacci(0)。然后fibonacci(1)将立即返回1,因为它是一个终止情况。与fibonnacci(0)发生的事情相同,因此现在我们计算出fibonnacci(2)=
1 + 0 =1。让我们回到fibonacci(3),它在这一点上已经部分评估:1 + fibonnacci(1)
。我们只需要计算fibonnacci(1)就可以最终返回1 +1 = 2。
即使在这个小例子中,您也可以看到我们对fibonacci(1)进行了两次评估,这就是为什么该版本是如此之慢,它多次计算相同序列值的原因,并且当“
number”很高时就很有价值。



