首页 > 解决方案 > Check Digit Sum Javascript-递归

问题描述

在递归中寻找Javascript解决方案以获取数字中所有数字的总和,直到结果为单个数字

例如,数字为“55555”,所有数字的总和为 25。因为这不是一位数字,所以将添加 2 和 5,结果为 7。

我根据算法尝试了以下解决方案。

function getSum(n) {
let sum = 0; 
 while(n > 0 || sum > 9) 
  { 
    if(n == 0) 
    { 
        n = sum; 
        sum = 0; 
    } 
    sum += n % 10; 
    n /= 10; 
  } 
  return sum; 
 }

 console.log(getSum("55555"));

标签: javascript

解决方案


这会起作用,但我几乎可以肯定有一个我还没有看到的漂亮的单线解决方案。

function singleDigitSum(str) {
  str = [...str].reduce((acc, c) => { return Number(c) + acc }, 0)
  while (str.toString().length > 1) {
    str = singleDigitSum(str.toString());
  }
  return str
}

console.log(singleDigitSum("55555"))

解释:

作为函数的第一步,您将重新分配给传递给函数的参数的 reducer 函数的结果,该函数将String. 为了能够使用Array.prototype.reduce()功能,我将您传播strarrayusing 中[...str]

然后,只要减速器返回一个多于一位的值,就冲洗并重复。当 while 循环退出时,结果是单个数字并且可以return编辑。


推荐阅读