作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个对象具有“值”或/和“ child ”作为属性。问题是将所有值相加并返回总和。这是工作。我用过递归。我正在使用全局变量来存储总和。
请引用- https://jsfiddle.net/ws6ty78b/1/
function sumup(node) {
sum+=node.value;
if (node.children && node.children.length > 0) {
for (var i =0; i < node.children.length; i++) {
sumup(node.children[i]);
}
}
return sum
}
问题 - 再次调用相同的函数时,我没有得到相同的结果。总和翻了一番。我知道为什么会这样,因为我使用的是全局变量。
问题 - 对于上述问题,有没有一种方法可以让我对任意数量的调用获得相同的结果。
请注意限制-
1) 不要更改函数签名和声明。
2) 在“sumup”函数中使用“sum”变量。
3) 不要使用任何额外的变量。
4) 仅在 sumup 函数内进行更改。
最佳答案
您可以简单地将每个子节点的值与当前节点的值相加:
function sumup(node) {
sum=node.value;
if (node.children && node.children.length > 0) {
for (var i =0; i < node.children.length; i++) {
sum+=sumup(node.children[i]);
}
}
return sum
}
关于JavaScript - 如何在递归期间重置局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50305436/
我是一名优秀的程序员,十分优秀!