Was macht "Return" genau?



  • Also angenommen ich habe folgende Funktion in meinem Programm:

    int fibo(int n)
    {
    if (n==0)
    {
    return 0;
    }
    if (n<=2)
    {
    return 1;
    }
    int fn= 1;
    int fn1 = 1;
    int fn2 = 0;
    for (int i = 2;i<n;i++)
    {
    fn= fn1 + fn2;
    fn2 = fn1;
    fn1 = fn;
    }
    return fn;
    }
    

    Was genau macht return 0, was return 1, was return fn?



  • Die returns geben die entsprechende Fibonacci-Zahl zurück.

    Also was die returns machen dürfte ja klar sein. Sie geben den Wert, der nach dem return steht zurück.

    Ist es das Problem, dass du die Fibonacci-Folge nicht kennst?



  • Ui, also das du dann auch gleichweißt, welchen Hintergrund das ganze hat macht mir Angst=)

    Mein Problem ist, dass ich return nicht ganz definieren kann. Laut dem Programm gibt es bei 1 eine 1 zurück bei 0 eine 0 und sonst die Fibonacci-Zahl?
    Und diese dann in mein eigentliches main Programm?



  • nehmen wir mal an du hast eine funktion

    int ret(int zahl)
    {
    return zahl;
    }

    das int vor dem funktionsnamen gibt an um welchen datentyp es sich handelt der mit return zurückgegeben wird.
    also hier ein integer wert.

    cout<<ret(5);

    cout gibt nun den wert 5 aus.

    return gibt einfach einen wert zurück an die stelle wo die funktion aufgerufen wurde.

    int zahl2 = ret(50);

    zahl2 hat nun den wert 50.



  • Um dies anhand eines Altagstaugelichen beispiel dar zu legen:

    Du bist Chef einer Zeitung und gibst einen deiner Jounalisten die Aufgabe eine Story zu finden, die Du drucken kannst, dieser kommt wieder und liefert dir die Story mit knallharten Fakten auf den Tisch und will ne Gehaltserhöung.

    Representativ gesehen ist hier der Jounalist deine Funktion

    char journalist()
    {
    char fakten[6];

    return fakten
    }

    Die Auftragserteilung ist in C++ der Funktionsaufruf

    schreibtisch = journalist()

    Und du als boss legst sie in deinen schreibtisch um sie zu gegebner Zeit wieder verwenden zu können.

    Ich hoffe ich konnte hier aufklärungsarbeiten leisten
    mfg Christopher Freytag 💡



  • Bei 2 gibt dein Programm auch 1 zurück, ohne große Berechnungen anzustellen.
    (Bitte formatiere deinen Code, sonst hat man weniger Lust, ihn zu lesen)
    Ich kenne die Fibonacci-Folge ja nur so (falls du Rekursion verstehst):

    unsigned int fib(unsigned int n)
    {
        if(fib == 0) return 0;
        if(fib == 1) return 1;
    
        return fib(n-1) + fib(n-2);
    }
    


  • Laut dem Programm gibt es bei 1 eine 1 zurück bei 0 eine 0 und sonst die Fibonacci-Zahl?
    Und diese dann in mein eigentliches main Programm?

    In jedem Fall berechnet die Funktion die n-Fibonacci Zahl. Im Fall von 0 oder 1 und 2 ist das eben 0, respektive 1.
    Und wenn es höher ist wird die Zahl iterativ berechnet. Die rekursive Variante ist näher an der mathematischen Definition, aber die Iterative ist eigentlich auch recht nachvollziehbar. Wenn du es nicht verstehst, dann spiel mal CPU und Folge dem Code Schritt für Schritt für eine kleine Zahl.

    Dann merkst du nämlich auch, dass die Anfangsbedingung nicht stimmt. fn2 ist auch 1. (weil du ja frühestens die 3te Fib. Zahl berechnest und die vorherigen beiden Fib. Zahlen sind 1 und 1).



  • Sheepstyle schrieb:

    Representativ gesehen ist hier der Jounalist deine Funktion

    Sehr schlechtes Beispiel, da auch richtig falsch, und zudem auch noch mit schlecht gewählter Namenswahl (Sprechende Namen helfen deutlich mehr).

    // Funktionsnamen nach dem Prinzip "Was soll gemacht werden?" hilft wesentlich
    // besser zum Verstehen.
    std::string recherchiereStory()
    {
        std::string story; // Umgeht zum einen das Problem, das eine Story mit
                           // Sicherheit nicht in 6 Zeichen passt, und das man
                           // dieses auch sinnvoll zurückgeben kann...
        //...
        return story;
    }
    
    // Komplizierter, aber wesentlich passender (Oder ersetzt du einen Schreibtisch
    // mit einer Story, und kann dieser zudem nur eine Story enthalten?).
    std::vector<std::string> schreibtischAblage;
    schreibtischAblage.push_back(recherchiereStory());
    


  • Danke für die Vereutlichung an alle.

    wxSkip schrieb:

    (Bitte formatiere deinen Code, sonst hat man weniger Lust, ihn zu lesen)

    Was genau meinst du damit?



  • Das heisst du solltest deinen Code einrücken 😉

    *Edit:

    Gut:

    int main()
    {
    	int i;
    	cin >> i;
    
    	if( i < 10 )
    		cout << "i kleiner als 10" << endl;
    	else
    		cout << "i grösser gleich 10" << endl;
    }
    

    Schlecht:

    int main()
    {
    int i;
    cin >> i;
    if( i < 10 )
    cout << "i kleiner als 10" << endl;
    else
    cout << "i grösser gleich 10" << endl;
    }
    


  • Alles klar wird gemacht in Zukunft 😉


Anmelden zum Antworten