Frage zum Ablauf einer Funktion
-
Kann mir bitte jemand erklären, wie bei der Funktion f der dritte Ausdruck der bedingten Auswertung Schritt für Schritt abgearbeitet wird? Ist zum berechnen der Fakultät von n.
#include <iostream.h>
int f( int const n ) {
return n == 0 ? 1 : n * f( n - 1 );
}int main(){
int x;
cout << "Geben Sie eine Zahl ein, fuer welche Sie die Fakultaet berechnen moechten: ";
cin >> x;
cout << f(x);
return 0;
}
-
int f( int const n ) { if (n == 0) return 1; else return n * f(n - 1); }
wäre das gleiche.
Ist es nun klarer oder hast du Probleme mit der Rekursion?
-
Die Rekursion ist recht einfach.
Du berechnest das Produkt über die ersten n Zahlen.
Hier mal ein Bsp:
f(4)=4*(f(3));
f(3)=3*(f(2));
f(2)=2*(f(1));
f(1)=1;Als ein Block geschrieben würde das so aussehen:
für n=1 : f(1)=1;
für n=2 : f(2)=2*f(1); also f(2)=2*1;
für n=3 : f(3)=3*f(2); also f(3)=3*(2*(1));
für n=4 : f(4)=4*f(3); also f(4)=4*(3*(2*(1)));
die Klammerkapselungen zeigen immer einen eigentlichen Funktionsaufruf an.
-
Ja, es geht um die Rekursion. Der Aufbau der Auswertung ist mir klar.
-
Erst mal danke an euch beide ,ich habs mir eigentlich eh so vorgestellt. Was ich mich aber noch frage, wieso hört die Funktion bei 1 auf und subtrahiert nicht auf 0?
-
Ups, mein Fehler die Funktion geht natürlich auf 0 runter.
Dies hat hier kinen Einfluß, da nur ein weiteres mal 1 multipliziert wird.
Das hat mein interner Optimierer gleich rausgenommen.
-
Aber wenn n dann 0 ist, wieso gibt es dann nicht 1 zurück, weil dann ja eigentlich die erste Bedingung erfüllt ist? Das ist, was ich nicht ganz checke!
-
Schreib das mal so um
int f( int const n ) { return (n == 0) ? 1 : n * f( n - 1 ); }
Das ? wertet ja nur den Ausdruck vor sich selbst aus.
Das wäre hier 0?1 was als if(false) zu verstehen wäre.
-
Also hat das "0" nichts mit der Ziffer 0 aus den z.B. 4 Funktionsaufrufen zu tun, sondern steht immer für false?
-
Bei if ja, sonst gibt es auch andere Bedeutungen.
Bei Pointern kann man damit den NULL Pointer angeben.
-
Okay, vielen Dank!