Fad*_*aos 6 javascript recursion tail-recursion
谢谢你的时间.
我正在学习斐波那契函数,其中一个答案如下:
function fibonacci(n) {
return (function(a, b, i) {
return (i < n) ? arguments.callee(b, a + b, i + 1) : a;
})(1, 1, 1);
}
console.log(fibonacci(51))
Run Code Online (Sandbox Code Playgroud)
由于在ES5之后严格模式中禁止arguments.callee,所以我用函数名替换它.之后,我看到了i + 1部分,我用i ++替换它,结果是太多的递归.
function x(n){
return (function y(a, b, i){
return (i < n) ? y(b, a + b, i++) : a;
})(1,1,1)
}
console.log(x(51))
Run Code Online (Sandbox Code Playgroud)
经过几次调试后,我发现i + 1工作正常,而i ++没有.
那么,我使用i ++是错误的地方还是我根本不了解i ++?
Thnx再次.
Ben*_*aum 10
i++递增一个数字并返回旧值.
这实际上意味着你要i到处传递而不是i + 1.
最好只是通过,i + 1因为这是你要求的价值 - 但++i也会有效.
i+1意思是"返回值比我大1 ,不要改变我 "
i++表示"将i递增1,但返回原始值"
++i表示"将i递增1并返回递增的值"
因此,在这种情况下,如果您使用的i+1是不更改i的值,但是您发送的值比i大一个作为参数.您也可以使用++i,如果您需要i中的值也可以更改.
例子
i = 10
a = i+1
// a = 11, i = 10
i = 10
a = i++
// a = 10, i = 11
i = 10
a = ++i
// a = 11, i = 11
Run Code Online (Sandbox Code Playgroud)
这同样也适用于i-1,i--和--i