Rekursiver Algorithmus für Fakultät - mathematisch?

4 Antworten

Was genau verstehst du daran nicht? Wie man einen Funktionswert nach einer solchen Vorschrift berechnet?

Beispiel g(3,3):

g(3,3) = 3 + g(3,2)    // g(3,2) weiß ich noch nicht
g(3,2) = 3 + g(3,1)    // g(3,1) weiß ich noch nicht
g(3,1) = 3 + g(3,0)    // g(3,0) = 0 denn y ist 0 !
also ist 
g(3,1) = 3     // g(3,0) eingesetzt
g(3,2) = 3 + g(3,1) = 6
g(3,3) = 3 + g(3,2) = 9

Okay, machen wir eien Starthilfe, 1. (a) für f(5):

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

Für b und c machst Du das entsprechend analog und überlegst Dir dann, was sich jeweils dahinter versteckt.

Die (1) verlangt ja erstmal nur, dass du dir beispielhaft Zahlenpaare (natürliche Zahlen <=10) anschaust. Also wählt man z.B. x=4 und y=6

(1) Da x=4>=2 trifft die erste Definition zu: f(x)=x+f(x-1)

x-1=3>=2 also trifft wieder die erste Definition zu: f(x)=x+(x-1)+f(x-2)

x-2>=2 also trifft....zu: f(x)=x+(x-1)+(x-2)+f(x-3)

x-3=1 also ist f(x-3)=1 nach Def.

Schlussendlich hast du also f(x)=x+(x-1)+(x-2)+1=4+3+2+1=10

Was du also rekursiv machst, ist alle natürlichen Zahlen von x an absteigend aufzuaddieren bis du bei der 0 bist.

So etwas rekursives kannst du (meist/immer ?) auch umformen, ohne Rekursion; hier wäre es die Gaußsche Summenformel.

Analog bei (2) und (3) nur dass hier das y auch ne Rolle spielt.

Hoffe das hilft, Grüße

Woher ich das weiß:Studium / Ausbildung – Mathematik Studium

Ich versteh deine Fragen leider nicht ganz.
Die 3 Rekursionen sind gegeben und die Aufgabe ist auch eindeutig gestellt.

Bei 1. handelt es sich meiner Meinung nach um die Summe aller Zahlen von 1-n und bei 3. um die Potenz.

Edit: Zur Erklärung:

Rekursion bedeutet nix anderes, wie „sich selber aufrufend“.

Wenn du zB. in C eine Funktion zur Errechnung der Summe aller Zahlen von 1-n hast, dann kann sie sich selber aufrufen.

int sum(int n) {
    if (n == 1) {
        return 1;
    }
    return n + sum(n-1); 
}  
Woher ich das weiß:Studium / Ausbildung – Studium Informatik / Softwaretechnik