Wie funktioniert die rekursion in java?
Warum kommt denn hier 120 heraus? Nach allem was ich gelernt habe sollte wort nur 20 herauskommen...
![Odndn - (programmieren, Java)](https://images.gutefrage.net/media/fragen/bilder/wie-funktioniert-die-rekursion-in-java/0_big.jpg?v=1514243471000)
3 Antworten
![](https://images.gutefrage.net/media/user/tavkomann/1546901653590_nmmslarge__0_0_512_512_d0d8c4156c0806032a429d80fed1cb83.png?v=1546901654000)
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.
![](https://images.gutefrage.net/media/user/tavkomann/1546901653590_nmmslarge__0_0_512_512_d0d8c4156c0806032a429d80fed1cb83.png?v=1546901654000)
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.
![](https://images.gutefrage.net/media/user/xxxcyberxxx/1691185806883_nmmslarge__0_0_1230_1230_4dfa4fbf5df5051b1dd22ccc1781adca.png?v=1691185807000)
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
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Die Rekursion funktioniert so wie in jeder anderen Sprache udn wie jede andere Rekusion auch.
Das Ergebnis ist 5*4*3*2*1=120
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ja aber warum? Es müsste doch nach 5* 4 aufhören
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
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
![](https://images.gutefrage.net/media/user/hoyohoo/1523253600064_nmmslarge__1_1_1023_1023_f5e18bab492c85d92c5e4e1eaf5eaf18.png?v=1523253600000)
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
Habe es denke ich verstanden aber das ist ja echt nicht auf anhieb zu verstehen als anfänger