Frage bei return
-
005 int fkt(int); 006 int binom(int, int); 007 008 int main() 009 { 010 int z; 011 int n; 012 do { 013 cout << "n: "; 014 cin >> n; 015 016 for(int i = 0; i <= n; i++) { 017 if(i != 0 && i != n) 018 cout << binom(n, i); 019 if(n - i > 1) 020 cout << "a^" << n - i; 021 else if(n - i == 1) 022 cout << "a"; 023 if(i > 1) 024 cout << "b^" << i; 025 else if(i == 1) 026 cout << "b"; 027 if(i < n) 028 cout << "+"; 029 } 030 031 cout << endl; 032 cout << "Nochmals? (0=Abbruch) "; 033 cin >> z; 034 } while(z != 0); 035 return 0; 036 } 037 038 int binom(int n, int k) 039 { 040 return fkt(n) / fkt(k) / fkt(n - k); 041 } 042 043 int fkt(int n) 044 { 045 if(n == 0) 046 return 1; 047 else 048 return n * fkt(n - 1); 049 }was macht hier das return zeile 38-40??
vielen dank.
-
Was macht wohl ein "return"? Es beendet die Funktion und liefert einen Wert zurück. In dem Fall wird der Wert direkt vor Ort berechnet als das Ergebnis des Ausdruckes "fkt(n)/fkt(k)/fkt(n-k)" (dabei wird dreimal die Funktion fkt() aufgerufen).
(btw, es gibt deutlich bessere Methoden, den Binomialkoeffizienten zu berechnen)
-
ich würd sagen es rechnet
n! geteilt durch k! geteilt durch (n-k)! und gibt das ergebins zurück ?!
oder hab cih den sinn deiner frage missverstanden ?
ausserdem wir fkt n+1+k+1+(n-k)+1 mal aufgerufen, der rekursion wegen :p
-
genau das wollt ich wissen, ob dieses return das rechnet.
aber er springt schon zuerst in zeile 43 und dann rechnet er das return?hab ich armer anfänger das richtig verstanden?
-
er springt mehrfach zur zeile 43 und wieder zurück bevor er den wert zurückgibt, aber ich vermute das du noch in labels denkst ala basic, kann das sein ?
sorry, hab den satz nicht ganz gelesen (im bezug auf stolls nachfolgenen post)
-
deiwid schrieb:
aber er springt schon zuerst in zeile 43 und dann rechnet er das return?
Er springt nicht vorher in Zeile 43, sondern während der Berechnung des Return-Wertes - ist auch kein Wunder, wenn er für die Berechnung weitere Funktionen aufrufen soll.
-
Ceos schrieb:
er springt mehrfach zur zeile 43 und wieder zurück bevor er den wert zurückgibt
genau das hab ich gemeint, dass das programm immer auf zeile 43 "zurückgreift" und die berechnung durchführt für fkt(n) fkt(k) fkt(n-k)
-
ich weis ja nicht womit du programmierst, aber du könntest doch mal mit einem debugger verfolgen was er macht, dann wird dir bestimmt einiges klarer ^^
zum thema debuggen lass ich mal anderen den vortritt ich hab ehrlich gesagt grad keine lust den link dazu rauszusuchen :p