Rekursion in Java verstehen

8

Ich habe Schwierigkeiten, den folgenden Code zu verstehen, der auf dem Rekursionsalgorithmus in Java basiert. Ich verstehe nicht, was ist der unterschiedliche Wert, den x und y haben, wenn sie sich gegenseitig aufrufen? Ich habe versucht, den richtigen Wert zu erhalten, indem ich System.out.print() innerhalb eines Codes anrufe, bekomme aber immer noch keine Hilfe.

%Vor%

Ich bin kein Meister in der Programmierung und versuche Java zu lernen. Jede Hilfe wird geschätzt.

    
Eric 08.08.2009, 04:08
quelle

4 Antworten

4

Im Wesentlichen ruft dies sich selbst auf, bis Sie die dritte Iteration ( x==3 ) erreichen.

Also, hier ist der Ablauf (abzüglich der zwei Aufrufe von maxSum in max ... der Einfachheit halber) (jeder Einzug ist ein Aufruf von maxSum ):

%Vor%     
Eric 08.08.2009 04:26
quelle
1

Die x- und y-Werte, auf die Sie sich beziehen, sind mit bestimmten Zahlen in der Zahlenpyramide verknüpft.

Was Ihr Algorithmus tut, ist, den maximalen Pfad in der Pyramide zu finden, indem Sie die oberste Ziffer hinzufügen und dann die große Pyramide in zwei kleinere aufteilen:

%Vor%

und

%Vor%

.

Es macht dann den gleichen Prozess auf den kleineren Pyramiden (ich werde es nur mit dem obersten tun):

%Vor%

und

%Vor%

.

Jetzt können Sie sehen, dass wenn es diese Pyramiden aufreißt, es nur noch zwei Zahlen hat, also gibt es sie zurück. Wenn es den Stapel wieder hochklettert, vergleicht es die zurückgegebenen Werte und gibt den größeren zurück.

Irgendwann kommen wir mit roher Gewalt an die Spitze, um jede Spur in der Pyramide zu überprüfen.

(Das gleiche Problem ist übrigens auf projecteuler.net)

    
thedayturns 08.08.2009 04:23
quelle
1

Der einfachste Weg zu verstehen, was mit einer rekursiven Funktion geschieht, ist, einen Bleistift und ein Papier herauszuholen und jeden Schritt zu schreiben, bis man zum Basisfall gelangt (in dieser Gleichung, wenn x == 3). Arbeiten Sie dann von dort rückwärts und stecken Sie die zurückgegebenen Werte in den vorhergehenden Schritten ein. Was Sie hier haben, ist Kopfrekursion, eine Situation, in der die Runtime jeden Schritt lösen muss und von jedem Schritt zurückkehrt, bis sie zu dem ursprünglichen Call zurückkehrt. Zu dieser Zeit haben Sie Ihre Antwort.

    
Patrick Farrell 08.08.2009 04:28
quelle
0

Die Werte von x und y sind einfach, da sie Argumente sind - schauen Sie sich einfach die vielen Aufrufe von maxSum an: Zuerst sind sie 0 und 0, bei jedem nächsten Schritt x + 1 und y + 1 (und x +1 und y) während des vorherigen Schritts und stoppe, wenn x auf 3 kommt. Also mach eine Tabelle, oder eher einen Baum ...:

%Vor%

... und das ist alles!

    
Alex Martelli 08.08.2009 04:24
quelle

Tags und Links