Funktionen



  • Moin Leute, ich verstehe nicht, warum bei diesen Programmcode 5 heraus kommt. Mir ist klar, dass c = 3 ist, aber wie kann b-a <= 1 und gleichzeitig 5 (wird ja return) sein?

    #include <iostream>
    using namespace std;
    
    int f(int a, int b) {
    if (b-a <= 1) {
    return b-a;
    } else {
    int c = (a+b) / 2;
    return 1 + f(a,c) + f(c,b);
    }
    
    }
    int main() {
    cout << f(2,5) << endl;
    return 0;
    }
    


  • @Florian200
    Was kommt denn bei f(2,3) und f(3,5) raus?

    In Zeile 9 wird die Funktion nochmal (rekursiv) aufgerufen.
    Dann ist das eine neue Instanz und läuft mit neuen Werten.
    Darin kann die Funktion sich selber wieder aufrufen.
    Jede Instanz gibt den Rückgabewert an die aufrufende Instanz zurück.
    Die Rückgabe an mainmacht demnach nur die erste Instanz.



  • hmm bei f(2,3) wäre es dann noch 3-2 =1 dann würde er doch 1 return oder bzw. was passiert dann mit f(3,5) werden die gleichzeitig aufgerufen?



  • @Florian200

    Bei f(2,5) wird return 1 + f(a,c) + f(c,b); ausgeführt.
    Dazu muss erst f(2,3) und dann f(3,5) berechnet werden.
    . f(2,3) ergibt 1
    . f(3,5) ruft dann (da c =4 ist) return 1 + f(3,4) + f(4,5) auf.
    .. f(3,4) ergibt 1
    .. f(4,5) ergibt 1
    . f(3,5) ergibt dann 3
    f(2,5) ist dann 1 + 1 + 3 = 5



  • Super, danke für die Antwort 🙂


Log in to reply