rekursiv |
05.12.2014, 18:53 | Auf diesen Beitrag antworten » | |||||
neuling96 | rekursiv Was gibt folgendes (rekursive) Programm auf dem Bildschirm aus? import IOulm.*; public class Obscure{ public static void obscure(int x, int y){ if (x*y<=4) return; Write.Line("x: "+x); if (x>=y) obscure(x-1, y); else obscure(y, x-1); Write.Line("y: "+y); } public static void main(String[] args){ obscure(3, 4); } } Beim ersten durch lauf nach obscure(3, 4)-> wird zu obscure(4, 2)?? Ich versteh nicht wie das überhaupt funktioniert |
|||||
|
||||||
05.12.2014, 19:26 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl |
richtig! und welcher Aufruf folgt dann aus obscure(4, 2)? Und wie sieht es mit der Ausgabe aus? Das x wird oberhalb des rekursiven Aufrufs schon ausgegeben, das y erst danach. Folglich werden erst alle x-e aus obscure(x, y) ausgegeben - und zwar in der Reihenfolge, wie die Funktion aufgerufen wird. Anschließend werden die y in umgekehrter Reihenfolge ausgegeben. |
|||||
05.12.2014, 19:31 | Auf diesen Beitrag antworten » | |||||
neuling96 | obscure(3, 4)-> wird zu obscure(4, 2)->obscure(3,2)->obscure(2,2) Aber nach obscure(2,2) Write.Line("x: "+x); Also x=2? |
|||||
05.12.2014, 19:41 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Bei obscure(2,2) wird ja schon abgebrochen, bevor es zur Ausgabe kommt. Aber von den obscure davor ist jeweils noch ein x auszugeben, bevor überhaupt der rekursive Aufruf zustande kommt. Und danach eben in umgedrehter Reihenfolge das y. Ich habe das Programm etwas modifiziert, damit ich zusätzlich noch erfahre, von welchem Funktionsaufruf die Ausgabe stammt. Der Anfang sieht so aus:
wie geht es weiter? |
|||||
Anzeige | ||||||
|
||||||
05.12.2014, 19:49 | Auf diesen Beitrag antworten » | |||||
neuling96 | dann für y: y: 2 y: 2 y: 4 |
|||||
05.12.2014, 19:49 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | passt |
|||||
05.12.2014, 20:01 | Auf diesen Beitrag antworten » | |||||
neuling96 | danke |
|