【问题标题】:Transform this iteration function to recursive将此迭代函数转换为递归
【发布时间】:2020-05-08 20:16:27
【问题描述】:

这是一个以迭代视角显示输入数字总和的函数:

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

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

【问题讨论】:

    标签: javascript recursion iteration


    【解决方案1】:

    我还没有测试过,但你可以尝试以下不强制转换为字符串

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

    确保输入确实是数字格式

    【讨论】:

      【解决方案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/

      【讨论】:

        【解决方案3】:

        给你

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

        【讨论】:

          猜你喜欢
          • 2014-03-01
          • 2021-07-06
          • 2021-11-03
          • 2020-08-20
          • 1970-01-01
          • 2020-08-08
          • 2015-05-30
          相关资源
          最近更新 更多