Javascript 这个斐波那契函数的执行流程如何

Javascript 这个斐波那契函数的执行流程如何,javascript,Javascript,我发现了这个fibonacci函数 我知道有很多例子。但我对这件事一无所知 const fibonacci=(num)=>{ 如果(num==0 | | num==1){ 返回[0,1]; }否则{ 设结果=斐波那契(num-1); result.push(结果[result.length-1]+结果[result.length-2]); 返回结果; } } 常数结果=斐波那契(7); 控制台日志(结果) 当执行行A时,保留调用堆栈行B和C。 当函数执行areturn时,返回B,使num等于堆

我发现了这个
fibonacci函数

我知道有很多例子。但我对这件事一无所知

const fibonacci=(num)=>{
如果(num==0 | | num==1){
返回[0,1];
}否则{
设结果=斐波那契(num-1);
result.push(结果[result.length-1]+结果[result.length-2]);
返回结果;
}
}
常数结果=斐波那契(7);
控制台日志(结果)
当执行行A时,保留调用堆栈行B和C。
当函数执行a
return
时,返回B,使
num
等于堆叠调用之前的值,然后在C中再次执行
return
操作,取消堆叠另一个调用,直到堆栈中不再有调用

这将导致无限循环(总是调用num-1,所以7,6,5,4,3,2,1,0,-1,-2,-3…),或者在调用堆栈中没有更多空间时崩溃。但是你要用你的

   if(num == 0 || num == 1) {
       return [0, 1];

因为这使得1不再堆叠任何调用。顺便说一句,最好用num<0(数学上更合理)定义一个错误,或者对于小于2的每一个值直接返回0,1(更实用)

你在说什么,num在哪里会增加?它从7开始,每次递归调用都只得到减量。但是为什么
num
在它进入堆栈B之后会增加呢?想象一下你得到一副牌。你找到7把黑桃放在桌子上,然后找到6把黑桃放在7的上面,然后是5,4,3,2…然后你得到钻石王牌。这是开始从堆中移除卡的信号。因此,在移除上面的数字后,卡上的数字不会增加,你只是碰巧找到了卡上一直有的旧值。谢谢你的解释——malarres。但是为什么它会回到过去呢?我认为它会在else块中第一次返回后停止,它是如何继续的?这不是递归特有的,而是调用函数的一般情况。当你调用一个函数时,在被调用的函数返回后,你返回到函数被调用的点,然后它返回-增加这个数字直到我的意思是7
   if(num == 0 || num == 1) {
       return [0, 1];