从递归函数修改全局变量不能按预期工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从递归函数修改全局变量不能按预期工作相关的知识,希望对你有一定的参考价值。
我尝试使用全局变量生成一个递归函数来计算从1到n的和,但它似乎没有按预期工作。
有人能为我解释原因吗?以下是javascript中的代码。
s = 0;
function sum(n) {
if (n === 1) {
return 1;
}
else {
s = s + n + sum(n - 1);
}
return 0;
}
sum(5);
console.log('The sum from 1 to 5 is ' + s); // this return wrong value
我的目的是为全局变量s创建一个副作用。因此,我假设所有堆栈帧都将按此顺序调用,每次弹出时(从下往上),s值将相应更新。如果我理解错了,请更正。
s = s + 5 + sum(4) // s = 10 + 5 + 0
return 0
------------------
s = s + 4 + sum(3) // s = 6 + 4 + 0
return 0
------------------
s = s + 3 + sum(2) // s = 3 + 3 + 0
return 0
------------------
s = s + 2 + sum(1) // s = 0 + 2 + 1
return 0
------------------
return 1 // s = 0 (from global)
以上是关于从递归函数修改全局变量不能按预期工作的主要内容,如果未能解决你的问题,请参考以下文章