Ich habe die Rekursion untersucht und angefangen, indem ich ein paar einfache Beispiele online durchgesehen habe, diese liefert die max oder min eines unsortierten Arrays.Wie eine äußere Methode auf einer inneren rekursiven Methode ausgeführt wird?
Ich verstehe die Idee, dass rekursive Aufrufe stapeln (ha), dann auf den Basisfall und entwirren rückwärts. In diesem Fall wird die rekursive Methode innerhalb einer Methode aufgerufen, die das Minimum von zwei Zahlen findet, und ich verstehe nicht, wie die min() -Methode für jede der rekursiven Methoden in einer Weise ausgeführt wird, die die Ergebnisse der rekursiven Methoden verknüpft zusammen, um das richtige Ergebnis zu erzielen.
Ich bin durch den Code gegangen, aber es hat mich mehr verwirrt.
Hier ist ein Java-MCVE der rekursiven Funktion und Beispielhaupt:
public static int min(int a, int b){
if (a<b)
return a;
return b;
}
public static int minValue(int arr[], int n){
if(n == 0)
return arr[0];
return min(minValue(arr,n-1),arr[n-1]);
}
public static void main(String[] args)
int[] arr = {30,20,21,5,3};
int minVal = minValue(arr,5);
System.out.printf("%d", minVal);
}
So wie ich diesen Code Ausführung bin Tracing:
first call, in main: minValue(arr,5) n is 5
goes to the recursive method: return min(minValue(arr,4),arr{4}), n is 4
starts to execute min, looks at the first arg
minValue executes again: return min(minValue(arr,3),arr{3}) n is 3
...(does this until n==0 is reached)
then return arr[0] executes and sends "30" back to the int minVal in Main.
Klar direkt aus der Rückkehr zurück wie diese Haupt ignoriert den Aufbau von Aufrufen auf dem Stapel, die darauf warten, ausgeführt zu werden, und das macht keinen Sinn. Ich fühle mich wie ich vermisse wie min() minVal() arbeitet.
TL; DR Kann mir jemand helfen, die Ausführung von min() auf den minVal() -Aufrufen zu verfolgen?