Ich mache Rekursion Übungen und ich verstehe die Grundlagen davon. Aber diese eine Übung hat mich feststecken lassen und ich habe keine Ahnung, wie es dazu gekommen ist. Hier ist sie:Rekursion: Wie funktioniert dieses Programm?
public class MinIndex_rec
{
public static void main(String[] args)
{
int[] a = {1, -16, -3, 4, -5, -12, -17};
System.out.println("The Min value index is: " + MinIndex(a, a.length - 1));
}
public static int MinIndex(int[] x, int n)
{
if(n == 0)
return n;
int index = MinIndex(x, n-1);
if(x[index]<x[n])
{
System.out.println(x[index] + "\t" + x[n] + "\t" + index + "\t" + n);
return index;
}
else
return n;
}
}
Die Ausgabe lautet:
-16 -3 1 2
-16 4 1 3
-16 -5 1 4
-16 -12 1 5
The Min value Index is: 6
Ich habe keine Ahnung, wie es kam zu diesem Ausgang. Ich würde mich über jede Hilfe freuen!
Oh mein Gott, vielen Dank! Dies macht es viel einfacher zu verstehen. Zwei Fragen jedoch, nachdem festgestellt wurde, dass n == 0 falsch ist, warum geht es dann zu (x, 5) usw., bis es 0 erreicht, anstatt weiter zu machen? Und wenn du dann zu x [0]
whosbrucewayne
@whosbrucewayne Wenn 'n == 0 'falsch ist, geht es zur nächsten Anweisung im Code, die' int index = MinIndex (x, n-1);' Aufruf von MinIndex mit 'n-1'. Bis 'n == 0' ist wahr und dann wird 'index' dem zurückgegebenen Aufruf zugewiesen. An diesem Punkt ist "index" gleich "0" und "n" gleich "1", also gehen wir zur nächsten Aussage "if (x [0]
@whosbrucewayne Die Funktionsaufrufe werden nach dem rekursiven Aufruf fortgesetzt, aber zuerst wird der rekursive Aufruf abgeschlossen, da die Funktion auf dem Rückgabewert beruht. –