Hallo,
Unten befindet sich der Algorithmus mit einem Beispielaufruf und darunter mit meiner Erklärung.
Habe ich die Rekursion richtig verstanden?
Zunächst geht er 1x in die if-Abfrage rein und setzt dann h=horner(a, x, n-1). Hier ist also der 1. Rekursionsaufruf erfolgt. Dann passiert dies nochmal (n ist nun 0) und horner wird ein 2. mal intern aufgerufen. Hier ist nun der 2. Rekursionsaufruf erfolgt. Nun ist die if-Abfrage n>0 falsch und er führt den else-Teil aus, indem er a[0] (=5) zurückgibt. Der 2. Rekursionsaufruf ist abgearbeitet, und er überspringt natürlich den else Teil da er ja vom if-Block kommt und gibt nun h*x+a[n] bzw. 5*2+3 zurück, und zwar gibt er dies als Antwort auf den 1. Rekursionsaufruf an h zurück. Also ist nun h=13. Dann wird wieder h*x+a[n] bzw 13*2+1 zurückgegeben, und zwar diesmal als Rückgabewert des ursprünglichen Funktionsaufruf in der System.out.println-Methode.
Habe ich die Rekursion richtig verstanden?
Unten befindet sich der Algorithmus mit einem Beispielaufruf und darunter mit meiner Erklärung.
Habe ich die Rekursion richtig verstanden?
Java:
public class App {
public static void main(String[] args) {
int a[] = {5, 3, 1};
System.out.println(horner(a, 2, 2));
}
static int horner(int a[], int x, int n){
int h;
if(n>0)
h=horner(a, x, n-1);
else
return a[n];
return h*x+a[n];
}
}
Zunächst geht er 1x in die if-Abfrage rein und setzt dann h=horner(a, x, n-1). Hier ist also der 1. Rekursionsaufruf erfolgt. Dann passiert dies nochmal (n ist nun 0) und horner wird ein 2. mal intern aufgerufen. Hier ist nun der 2. Rekursionsaufruf erfolgt. Nun ist die if-Abfrage n>0 falsch und er führt den else-Teil aus, indem er a[0] (=5) zurückgibt. Der 2. Rekursionsaufruf ist abgearbeitet, und er überspringt natürlich den else Teil da er ja vom if-Block kommt und gibt nun h*x+a[n] bzw. 5*2+3 zurück, und zwar gibt er dies als Antwort auf den 1. Rekursionsaufruf an h zurück. Also ist nun h=13. Dann wird wieder h*x+a[n] bzw 13*2+1 zurückgegeben, und zwar diesmal als Rückgabewert des ursprünglichen Funktionsaufruf in der System.out.println-Methode.
Habe ich die Rekursion richtig verstanden?