无法弄清楚为什么参数在 JS 斐波那契函数递归期间发生变化

Can't figure out why parameter is changing during recursion in JS fibonacci function

目前正在学习JS。

无法弄清楚此函数 "prev1" 参数在递归过程中的哪个位置以某种方式被修改? 如果 "console.log(prev1)" 在每次迭代中 "prev1" 实际上是修改的,尽管在下面代码的 none 中似乎更改了此参数。 请帮助我理解这件事。

        function fibonacci(n, prev1, prev2){
          //console.log(prev1);
          var current = prev1 + prev2;
          var fibonacci_string = current + " ";

          if(n > 1)
              fibonacci_string += fibonacci(n - 1, current, prev1);
          return fibonacci_string;

        }
        console.log(fibonacci(10, 1, 0));

console.log(上一个):

1
1
2
3
5
8
13
21
34
55

prev1 是函数 fibonacci 的参数。 当行

fibonacci_string += fibonacci(n - 1, current, prev1);

被称为 current 代替 prev1 并作为参数提供给斐波那契函数。 prev1 不是实际变量,它只是函数将要接收的值的占位符。如果代替 prev1,你在函数 prev1 中给出 value as 5,prev1 的值为 5 并进行相应处理,在上面的代码中,递归调用时 current 代替 prev1,你可以看到 current 的值是如何改变的那。

如果您查看递归调用:

           fibonacci(n - 1, current, prev1)
  // calls:          ⬇️      ⬇️      ⬇️
  function fibonacci(n,     prev1,   prev2)

可以看到prev1得到了前面current的值。

正如您在 if 语句中看到的,还有另一个调用 fibonacci() 的第二个参数 currentprev1 和 [=14= 的总和].所以基本上在这个 if 语句中,当你调用 fibonacci() 时,它再次进入同一个函数所以代码转到函数的定义,即 function fibonacci(n, prev1, prev2) 其中 prev1 代表从调用此函数的任何地方传递的第二个参数:在这种情况下,您传递的第二个参数是 current.

prev1是递归函数的一个参数。每次调用该函数时,都会使用它自己的一组标识符创建新的执行上下文。标识符注册意味着将传递给函数调用(参数)的值与函数参数绑定。在提供的示例中,调用发生在:

fibonacci(n - 1, current, prev1);

prev1fibonacci 函数的第二个参数,因此它绑定到传递给调用的第二个参数(current 变量的值)。

这是一个递归函数,每次迭代参数都有不同的值: 在第一次迭代中 prev1=1, prev2=0 第二次迭代:prev1=prev1+prev2=1, prev2=prev1=1 第三次迭代:prev1=prev1+prev2=2, prev2=prev1=1 第四次迭代:prev1=prev1+prev2=3, prev2=prev1=2 第五次迭代:prev1=prev1+prev2=5, prev2=prev1=3