如何在我的递归函数中声明一个计数器?(附加持久性:Coderbyte)

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)

提前谢谢了!

geo*_*org 5

想法很简单

AdditivePersistence(n):
   if n < 10
      return 0
   else
      return 1 + AdditivePersistence(sum-of-digits(n))
Run Code Online (Sandbox Code Playgroud)

严格来说,这里不需要递归——这本质上是一个正常的while循环。

  • 严格来说,我认为您永远不需要*递归。任何具有递归的东西都应该作为迭代循环重写。 (2认同)