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


Anmelden zum Antworten