tsa*_*vid 2 javascript algorithm recursion
在解决一些 Coderbyte 挑战时,我能够递归地解决以下问题,但希望得到一些关于如何改进它的反馈。
让函数 AdditivePersistence(num) 接受传递的 num 参数,该参数始终是一个正整数,并返回其附加持久性,即必须在 num 中添加数字直到达到一位数的次数。
例如:如果 num 是 2718,那么你的程序应该返回 2,因为 2 + 7 + 1 + 8 = 18 和 1 + 8 = 9 并且你在 9 处停止。
我提交的工作递归解决方案如下。如何将“计数”放入我的函数中,而不会在每次递归时让它“重置”?
var count = 0;
function AdditivePersistence(num) {
count = 0;
if (num < 10) {
return count;
}
if (num > 10) {
count++;
AdditivePersistence('' + num.split("").reduce(function(a,b) {
return parseInt(a) + parseInt(b)
}));
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在函数内移动计数器的失败尝试......希望为我的初学者提供任何指针。除了修复代码之外,如果有其他解决这个难题的好方法,我会很高兴的!
function AdditivePersistence(num) {
var count = 0;
(function recurse(num) {
if (num < 10) {
return count;
}
if (num > 10) {
count++;
recurse('' + num.split("").reduce(function(a,b) {
return parseInt(a) + parseInt(b);
}));
}
})();
return count;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我只是在下面尝试了一个 while 循环
function AdditivePersistence(num) {
var count = 0;
while (num >= 10) {
count++
num = num.toString().split('').reduce(function(a,b) {
return parseInt(a) + parseInt(b);
})}
return count;
}
Run Code Online (Sandbox Code Playgroud)
提前谢谢了!
想法很简单
AdditivePersistence(n):
if n < 10
return 0
else
return 1 + AdditivePersistence(sum-of-digits(n))
Run Code Online (Sandbox Code Playgroud)
严格来说,这里不需要递归——这本质上是一个正常的while循环。