2016-04-06 6 views
0

Ich habe ein Problem zu verstehen, wie Rekursion Parameter berechnet, die in dieser Frage Java recursion and integer double digit erläutert. Der implementierte Code sieht wie folgt aus:zweistellige Rekursion Erklärung

public static int doubleDigits(int i){ 

     if (i == 0){ 
      return 0; 
     }else{ 
      return doubleDigits(i/10) * 100 + (i % 10) * 10 + i % 10; 
     } 


} 

Mit dem Ergebnis, wenn int i = 1234:

11223344 

Ich habe versucht, den Code zu debuggen, aber Schwierigkeiten haben, zu verstehen, was vor sich geht.

Ich habe viele Beispiele überprüft, und ich kann die meisten Fälle verstehen, wie Rekursion funktioniert, aber nicht in diesem Fall.

Ich würde gerne eine leicht verständliche Erklärung bekommen, wie Rekursion in diesem Fall funktioniert.

+0

'doubleDigits' wird rekursiv aufgerufen, bis es die Abbruchbedingung erfüllt. –

+4

Benutze einen Bleistift und ein Papier, setze 'i = 12' und fange an Dinge zu zeichnen. Diese Methode hilft Ihnen, die Rekursion in 100% der Fälle zu verstehen. – Maroun

+1

Ich werde versuchen, mit dem Stift und Papier, klingt wie eine gute Idee.haha. – codeme

Antwort

3

Rekursion funktioniert immer, indem Sie ein kleineres Problem lösen und dann zu dieser Lösung hinzufügen (oder kleinere Lösungen kombinieren).

doubleDigits(i/10) 

verdoppelt die Ziffern der Nummer mit allen Ziffern der ursprünglichen Nummer außer der letzten.

Dann wird es mit 100 multipliziert, um Platz für die verbleibenden zwei Ziffern zu schaffen, die mit (i % 10) * 10 + i % 10 hinzugefügt werden. i % 10 ist die letzte Ziffer der Eingangsnummer und wird zweimal zur Ausgangsnummer hinzugefügt.

doubleDigits(1234/10) * 100 + (i % 10) * 10 + i % 10 

112233     * 100 +  4 * 10 +  4   = 11223344 
+0

nette Erklärung, danke. – codeme