Javascript函数。Don';我不明白自我功能内部的功能是如何工作的

Javascript函数。Don';我不明白自我功能内部的功能是如何工作的,javascript,function,recursion,Javascript,Function,Recursion,想询问有关JavaScript函数的信息 我不理解下面的函数,我想在第4行fib(n-1)将返回1,后者fib(n-2)将返回0,然后两者相加为1 请问f(10)的最终结果为何将是55,我无法理解这一点 谁能帮我解释一下幕后发生了什么 谢谢!;) 参考:像这样。这是一个典型的递归函数,有两个基本情况和一个递归步骤 请记住,如果n为10,则fib(n-1)为fib(9),依此类推: fib(10) = fib(9) + fib(8) = 34 + 21 = 55 fib(9) = fib(8)

想询问有关JavaScript函数的信息

我不理解下面的函数,我想在第4行
fib(n-1)
将返回
1
,后者
fib(n-2)
将返回
0
,然后两者相加为1

请问
f(10)的最终结果为何将是
55
,我无法理解这一点

谁能帮我解释一下幕后发生了什么

谢谢!;)


参考:

像这样。这是一个典型的递归函数,有两个基本情况和一个递归步骤

请记住,如果
n
为10,则
fib(n-1)
fib(9)
,依此类推:

fib(10) = fib(9) + fib(8) = 34 + 21 = 55
fib(9)  = fib(8) + fib(7) = 21 + 13 = 34
fib(8)  = fib(7) + fib(6) = 13 +  8 = 21
fib(7)  = fib(6) + fib(5) =  8 +  5 = 13
fib(6)  = fib(5) + fib(4) =  5 +  3 =  8
fib(5)  = fib(4) + fib(3) =  3 +  2 =  5
fib(4)  = fib(3) + fib(2) =  2 +  1 =  3
fib(3)  = fib(2) + fib(1) =  1 +  1 =  2
fib(2)  = fib(1) + fib(0) =  1 +  0 =  1
fib(1)  =                              1
fib(0)  =                              0
旁注:虽然您的示例很好地说明了递归函数,但它是计算斐波那契数的一种效率极低的方法。一个更好的方法是消除大部分的低效率:

var fib=(函数(){
变量缓存=[0,1];
返回函数fib(num){
如果(!(缓存中的num)){
cache[num]=fib(num-1)+fib(num-2);
}
返回缓存[num];
};
})();
控制台日志(fib(10))这被称为“递归函数”,一个函数调用它自己。



基本上没有这样做的限制(就操作系统而言),函数基本上被解释/编译为汇编代码,并且可以使用不同(或相同)参数复制和重新运行此汇编代码

这是一个非常基本的递归函数,如果你不理解它,你就不理解递归,所以你应该查一下。答案很好!我理解递归,但我总是很难向人们解释!!!嘿,谢谢你的详细解释!我发现分解它真的很有帮助,这是找到递归函数解决方案的常用方法(分解它),还是只有我?@NixSiow当你开始学习递归时,这是分解它的好方法,有时甚至有经验的程序员也需要这样做,但理想情况下,您最终应该能够看到递归函数在做什么,而不必经历整个过程。
fib(10) = fib(9) + fib(8) = 34 + 21 = 55
fib(9)  = fib(8) + fib(7) = 21 + 13 = 34
fib(8)  = fib(7) + fib(6) = 13 +  8 = 21
fib(7)  = fib(6) + fib(5) =  8 +  5 = 13
fib(6)  = fib(5) + fib(4) =  5 +  3 =  8
fib(5)  = fib(4) + fib(3) =  3 +  2 =  5
fib(4)  = fib(3) + fib(2) =  2 +  1 =  3
fib(3)  = fib(2) + fib(1) =  1 +  1 =  2
fib(2)  = fib(1) + fib(0) =  1 +  0 =  1
fib(1)  =                              1
fib(0)  =                              0