2017-05-15 5 views
1

Wie mit rekursive Funktion (JavaScript) ilterate

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

Ich tat dies mit For-Schleife und dann wiederholen. Die Frage ist, wie mache ich das Gleiche, aber mit rekursiver Funktion?

+1

Siehe [Allgemeine Methode zum Konvertieren einer Schleife (while/for) in Rekursion oder von einer Rekursion in eine Schleife?] (Https://softwareengineering.stackexchange.com/questions/279004/general-way-to-convert- a-Schleife-während-für-Rekursion-oder-von-einer-Rekursion-zu-a) –

+0

durch rekursives Aufrufen einer Funktion –

Antwort

2

Sie könnten nur das erste Element zum Hinzufügen verwenden und die Funktion erneut mit dem Rest des Arrays aufrufen.

In diesem Fall wird eine Überprüfung der Länge durchgeführt, die entweder 0 zurückgibt, wenn das Array keine Elemente oder die Elementanzahl hat, dann wird eine Verschiebung durchgeführt, die das erste Element des Arrays zurückgibt. Zusätzlich wird die Funktion mit dem reduzierten Array erneut aufgerufen.

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

Für die Eingabe Sie (22222) Ihre Funktion ist eine praktische Lösung. Wenn Sie eine Funktion wünschen, die eine Zahl nimmt und fügt sich zusammen, um eine bestimmte Anzahl von Zeiten können Sie einfach das tun ...

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

Aber wenn Sie benötigen wirklich ein Beispiel für eine rekursive Funktion dieses folgende Willen zu tun erreiche das gleiche ergebnis ...

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 

Hoffe, dass geholfen hat. :)

(Siehe hierzu blog post on JavaScript recursion von integralist).