2017-05-15 105 views
1

如何使用遞歸函數(JavaScript)的

function numberSum(num) { 
 

 
    var str = num.toString(); 
 
    var arrNum = str.split('').map(Number);//arrNum = [1, 2, 3]; 
 

 
    //For-looping 
 
    var result = 0; 
 
    for (var i = 0; i < arrNum.length; i++) { 
 
    result = result + arrNum[i]; 
 
    } 
 
    return result; 
 
} 
 

 

 
console.log(numberSum(22222)); // 2 + 2 + 2 + 2 + 2 = 10

ilterate我這樣做是與對於套住,然後重複它。問題是,我如何做到這一點,但遞歸函數?

+1

請參閱[將循環(while/for)轉換爲遞歸或從遞歸轉換爲循環的一般方法?](https://softwareengineering.stackexchange.com/questions/279004/general-way-to-convert- a-loop-while-for-to-recursion-or-from-acursion-to-a) –

+0

通過遞歸調用一個函數 –

回答

2

您可以只使用第一個元素進行添加,然後再次調用該數組的其餘部分的函數。

在這種情況下,檢查長度,如果數組沒有項目或項目計數,則返回0,則返回數組的第一項。另外,該函數再次使用簡化數組調用。

function iter(array) { 
    return array.length && array.shift() + iter(array); 
    //  ^^^^^^^^^^^^         exit condition, 
    //             if zero, return zero, 
    //             otherwise return the 
    //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^ iteration part 
    //             return the first value and 
    //             call recursion again 
} 

function numberSum(v) { 
 
    function iter(array) { 
 
     return array.length && array.shift() + iter(array); 
 
    } 
 

 
    return iter(v.toString().split('').map(Number)); 
 
} 
 

 
console.log(numberSum(22222)); // 2 + 2 + 2 + 2 + 2 = 10

0

對於你輸入(22222)您的函數是一個實用的解決方案。如果你想有一個函數,它接受一個數字,加在一起,本身一定的次數,你可以簡單地做到這一點...

function sums(a, b) { 
    return a * b; 
} 
sums(2, 5); 
//=> 10 

但如果你真的需要一個遞歸函數的例子來做到這一點,下面將達到相同的結果...

var num = 2; 
var iterate = 5; 

function sums(n, count, total) { 
    if (count === 0) { 
     return total; 
    } else { 
     return sums(n, --count, total+n); 
    } 
} 
console.log(sums(num, iterate, 0)); 
//=> 10 

希望有所幫助。 :)

(見集成主義者blog post on JavaScript recursion)。