gpt4 book ai didi

javascript - 为什么在此代码中使用 “n--” 运算符会引发错误?

转载 作者:行者123 更新时间:2023-12-02 23:49:33 25 4
gpt4 key购买 nike

此代码有效:

function factorial(n){
if(n==0){
return 1;
}else{
return n* factorial(n-1);
}
};

console.log(factorial(5));

这不会:

function factorial(n){
if(n==0){
return 1;
}else{
return n* factorial(n--);
}
};

console.log(factorial(5));

我正在使用递归进行一个简单的“阶乘”挑战。有人可以向我解释为什么我必须使用“n-1”,而当我使用“n--”时,它会给出“RangeError:超出最大调用堆栈大小”。?

最佳答案

如果你使用过

return n* factorial(n--);

它的作用是递减 n ,以及 n--表达式的计算结果为 n 在减量之前。这称为后递减。

let n = 3;
console.log(n--);

虽然你可以使用

return n* factorial(--n);

称为预递减,会递减n并将表达式计算为 n 的值在递减之后,重新分配 n 是没有意义的。完全在这里 - 毕竟,在递归调用之后您不会访问它。 (递归调用之前的 n* 已经被求值,但是在调用递归函数时更改 n 看起来很容易造成困惑。)调用 factorialn - 1使代码的意图更加清晰,因此应该是首选:

return n* factorial(n - 1);

关于javascript - 为什么在此代码中使用 “n--” 运算符会引发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55699486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com