Wie funktioniert die rekursion in java?

Odndn - (programmieren, Java)

3 Antworten

Also, mal ganz langsam:

z = fakultät(5)

5 ist ungleich 1, also ergibt sich:

z = fakultät(5-1) * 5

5 - 1 = 4 ist ungleich 1, also ergibt sich:

z = fakultät(4-1) * 4 * 5

4 - 1 = 3 ist ungleich 1, also ergibt sich:

z = fakultät(3-1) * 3 * 4 * 5

3 - 1 = 2 ist ungleich 1, also ergibt sich:

z = fakultät(2-1) * 2 * 3 * 4 * 5

2 - 1 = 1 ist gleich 1, also ergibt sich:

z = 1 * 2 * 3 * 4 * 5 = 120

Es kommt somit 120 als Rückgabewert beim Parameter 5 für die Fakultätsmethode heraus.


pascalmeister 
Beitragsersteller
 26.12.2017, 00:32

Habe es denke ich verstanden aber das ist ja echt nicht auf anhieb zu verstehen als anfänger

0
tavkomann  26.12.2017, 00:39
@pascalmeister

Ja, rekursive Lösungen sind für Anfänger oftmals komplexer zu verstehen oder zu formulieren als iterative. Dennoch sind sie aus mathematischer Sicht i.d.R. naheliegender, auch wenn die iterative Lösung meistens effizienter ist.

0

Wenn du es mal "manuell" im Kopf nachrechnest, wirst du feststellen, wieso

fakultät(5) = fakultät(4)*5
fakultät(4)*5 = fakultät(3)*4*5
fakultät(3)*4*5 = fakultät(2)*3*4*5
fakultät(2)*3*4*5 = fakultät(1)*2*3*4*5
fakultät(1)*2*3*4*5 = 1*2*3*4*5 = 120

Die Rekursion funktioniert so wie in jeder anderen Sprache udn wie jede andere Rekusion auch.

Das Ergebnis ist 5*4*3*2*1=120


pascalmeister 
Beitragsersteller
 26.12.2017, 00:19

Ja aber warum? Es müsste doch nach 5* 4 aufhören

0
KarlRanseierIII  26.12.2017, 00:21
@pascalmeister

Nein, denn:

f(5), x!= 1, Also 5*f(4)

f(4), x!=1,also 4*f(3)

usw. usf.

Ergo: f(5)=5*f(4)=5*4*f(3)=5*4*3*f(2)=5*4*3*2*f(1)=5*4*3*2*1

0
hoyohoo  26.12.2017, 00:22
@pascalmeister

Wieso soll die denn aufhören? Die ruft sich so lange wieder auf, bis man bei x == 1 ankommt und dann als Rückgabewert eine 1 zurückgibt, die nächsthöhere Instanz macht dann 1 * 2 und gibt das an die eins höhere Instanz weiter, die dann 1 * 2 * 3 an die nächste weitergibt, bis man bei 5 ist, die dann 1 * 2 * 3 * 4 * 5 = 120 ausrechnet

0