Recursion 为什么递归斐波那契有效?

Recursion 为什么递归斐波那契有效?,recursion,fibonacci,Recursion,Fibonacci,我正在查看以下代码: function _fibonacci(n) { if (n < 2){ return 1; }else{ return _fibonacci(n-2) + _fibonacci(n-1); } } console.log(_fibonacci(5)) 函数_fibonacci(n){ if(n

我正在查看以下代码:

function _fibonacci(n) {
   if (n < 2){
     return 1;
   }else{
     return _fibonacci(n-2) + _fibonacci(n-1);
   }
} 
console.log(_fibonacci(5))
函数_fibonacci(n){
if(n<2){
返回1;
}否则{
返回fibonacci(n-2)+fibonacci(n-1);
}
} 
控制台日志(_fibonacci(5))

我明白这是怎么回事,但我不明白为什么会这样。有人能给我解释一下为什么这样做吗?

很简单,位置0和1的斐波那契答案都是1(序列看起来像1、2、3、5、8等等),所以当它进入函数时,n是0或1(对于n-2递归调用和n-1递归调用都可能发生),结果是1。对于所有其他值,它只是不断地添加数字


(请注意,序列中的前2个值可以是0 1或1 1,这取决于您对序列的定义。对于这一个,显然假定前2个值都是1。)

您到底不明白什么?你怎么能理解它是如何工作的,而不是它为什么工作?为什么它会给出正确的结果?它工作是因为当返回1时递归行为被破坏了。实际上这个实现假设2以下的任何东西都是1,所以如果我说
\u fibonacci(-1)
\u fibonacci(0)
,我仍然会得到1。似乎是一个不正确的实现。嗯,是的,你可以说你需要清理输入,使其高于0,但我认为这只是为了不使事情过于复杂。许多实现实际上认为0是序列的第一个数,所以您可以只返回0个n=0,并且只需要为0以下的值抛出异常。