Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';在JS fibonacci函数的递归过程中,我们无法理解参数为什么会发生变化_Javascript_Function_Recursion_Parameters_Fibonacci - Fatal编程技术网

Javascript Can';在JS fibonacci函数的递归过程中,我们无法理解参数为什么会发生变化

Javascript Can';在JS fibonacci函数的递归过程中,我们无法理解参数为什么会发生变化,javascript,function,recursion,parameters,fibonacci,Javascript,Function,Recursion,Parameters,Fibonacci,目前正在学习JS 无法确定在递归过程中,函数“prev1”参数在哪一点被修改? 如果每次迭代中的“console.log(prev1)”都被修改,那么“prev1”实际上是修改的,尽管在下面的代码中似乎没有任何一个更改此参数。 请帮我理解这件事 function fibonacci(n, prev1, prev2){ //console.log(prev1); var current = prev1 + prev2; v

目前正在学习JS

无法确定在递归过程中,函数“prev1”参数在哪一点被修改? 如果每次迭代中的“console.log(prev1)”都被修改,那么“prev1”实际上是修改的,尽管在下面的代码中似乎没有任何一个更改此参数。 请帮我理解这件事

        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(prev1):


prev1是函数斐波那契的一个参数。 排队的时候

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

被称为current的替换为prev1,并作为斐波那契函数的参数提供。prev1不是实际变量,它只是函数将要接收的值的占位符。如果您在函数prev1中指定值为5来代替prev1,那么prev1的值将为5,并相应地进行处理。在上面的代码中,递归调用prev1时,current将取代prev1,并且current的值是如何更改的,您可以看到这一点

prev1是函数fibonacci的参数。 排队的时候

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

被称为current的替换为prev1,并作为斐波那契函数的参数提供。prev1不是实际变量,它只是函数将要接收的值的占位符。如果您在函数prev1中指定值为5来代替prev1,那么prev1的值将为5,并相应地进行处理。在上面的代码中,递归调用prev1时,current将取代prev1,并且current的值是如何更改的,您可以看到这一点

如果查看递归调用:

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

如果查看递归调用,您可以看到
prev1
获取上一个
当前
的值:

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

您可以看到,
prev1
获取前一个
当前的值
,正如您在
if
语句中看到的那样,还有另一个调用
fibonacci()
的第二个参数
current
,它是
prev1
prev2
的总和。因此,基本上在这个
if
语句中,当调用
fibonacci()
时,它再次进入同一个函数,因此代码进入函数的定义,即
函数fibonacci(n,prev1,prev2)
其中
prev1
表示从调用此函数的任何位置传递的第二个参数:在这种情况下,传递的第二个参数是
当前的

,正如您在
if
语句中看到的那样,还有另一个
fibonacci()调用
带有第二个参数
current
,它是
prev1
prev2
的总和。因此,基本上在这个
if
语句中,当调用
fibonacci()
时,它再次进入同一个函数,因此代码进入函数的定义,即
函数fibonacci(n,prev1,prev2)
其中
prev1
表示从调用此函数的任何位置传递的第二个参数:在本例中,传递的第二个参数是
当前的

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

fibonacci(n - 1, current, prev1);

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

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

fibonacci(n - 1, current, prev1);

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

它是一个递归函数,如果每次迭代参数都有不同的值: 在第一次迭代中,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

这是一个递归函数,如果每次迭代参数都有不同的值: 在第一次迭代中,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

好的,我想我明白了。每次调用函数时,params(prev1和prev2)都会相互更改,首先prev1=1;prev2=0,在第一个之后,如果它变为prev1=current=1;prev2=prev1=1;如果prev1=current=2,则在第二次调用时如此;prev2=prev1=1;等。有点困惑,但我想我会完全理解:)好的,我想我明白了。每次调用函数时,params(prev1和prev2)都会相互更改,首先prev1=1;prev2=0,在第一个之后,如果它变为prev1=current=1;prev2=prev1=1;如果prev1=current=2,则在第二次调用时如此;prev2=prev1=1;等等。有点困惑,但我想我会及时完全理解:)