Преобразуйте эту итерационную функцию в рекурсивную - PullRequest
1 голос
/ 22 января 2020

Это функция для отображения суммы входных цифр с итерационной перспективой:

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 ]

2 голосов
/ 22 января 2020

Используя оператор по модулю, вы можете получить остаток (который в случае деления на 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 голосов
/ 22 января 2020

Я не проверял это, но вы можете попробовать следующее без приведения к строке

function sumOfDigits(number) 
{ 

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

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

Убедитесь, что ввод действительно в числовом формате

1 голос
/ 22 января 2020

Здесь вы go

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