Javascript Can';在JS fibonacci函数的递归过程中,我们无法理解参数为什么会发生变化
目前正在学习JS 无法确定在递归过程中,函数“prev1”参数在哪一点被修改? 如果每次迭代中的“console.log(prev1)”都被修改,那么“prev1”实际上是修改的,尽管在下面的代码中似乎没有任何一个更改此参数。 请帮我理解这件事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
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;等等。有点困惑,但我想我会及时完全理解:)