将此迭代函数转换为递归

时间:2020-01-22 15:57:19

标签: javascript recursion iteration

此功能可从迭代角度显示输入数字的总和:

function sumOfDigits(number) {
    let strNumber = number.toString()
    let output = 0;
    for(i=0;i<strNumber.length;i++){
      let tmp = parseInt(strNumber[i])
      output = output + tmp
    }
    return output
}

// TEST CASES
console.log(sumOfDigits(512)); // 8
console.log(sumOfDigits(1542)); // 12
console.log(sumOfDigits(5)); // 5
console.log(sumOfDigits(21)); // 3
console.log(sumOfDigits(11111)); // 5

我想知道我们如何以递归方式编写此函数吗?

3 个答案:

答案 0 :(得分:2)

我尚未对其进行测试,但是您可以尝试以下操作而无需转换为字符串

function sumOfDigits(number) 
{ 

    if (number === 0) {
       return 0; 
    }

    return (number % 10 + sumOfDigits(Math.floor(number / 10))); 
}

请确保输入确实采用数字格式

答案 1 :(得分:2)

使用取模运算符,可以得到余数(在除以10的情况下是最后一个数字),然后添加下一个迭代。

function sumOfDigits (n) {
    if (n === 0) return 0
    return (n % 10 + sumOfDigits(Math.floor(n / 10)))
}

console.log(sumOfDigits(512))

如果您想查看更详细的说明,请选中https://www.geeksforgeeks.org/sum-digit-number-using-recursion/

答案 2 :(得分:1)

你在这里

function sumOfDigitsRecursive(number){
    let strNumber = number.toString()
    if(strNumber.length<=0)
       return 0
    return parseInt(strNumber[0])+sumOfDigitsRecursive(strNumber.slice(1,strNumber.length))
}