【发布时间】:2018-05-12 10:53:31
【问题描述】:
有一个具有“值”或/和“子项”作为属性的对象。问题是将所有值相加并返回总和。这是有效的。我使用了递归。我正在使用全局变量来存储总和。
请参考-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 函数内进行更改。
【问题讨论】:
-
Please note the restrictions很做作,有点傻…… -
@CertainPerformance - 不比坐在面试官面前一无所知更傻!
-
“不要更改函数签名,包括定义和声明”,然后“只在 sumup 函数内进行更改”...有什么变化?您不允许任何更改。
-
@GerardoFurtado 感谢您的指出!修改ofcourse的定义!不是签名和声明
-
'function sumup(xyz)' 和 'sumup(abc)' 将保持不变。基本上没有柯里化或添加额外的参数。希望清楚。
标签: javascript recursion tree closures global