Rekursion (Fakultät)



  • Stack Overflow kommt wegen deiner Endlosrekursion. Du rufst die Funktion immer wieder auf. Es werden immer wieder die lokalen Variablen der Funktion auf den Stack gelegt. Irgendwann isser voll. 😉 Rekursion ohne Bedingung ist halt Quatsch. Die fehlt eine Abbruchbedingung.



  • Aufgabe ist es, die Fakultät als Rekursion anzugeben

    Sorry, du berechnest die Fakultaet iterativ und rufts die Funktion rekursiv auf. Das ist nicht die Loesung.



  • Denke noch mal in Ruhe darüber nach. Es ist viel einfacher, als du dir das vielleicht vorstellst. 😉 Und lass am besten die Umlaute in Funktions- und Variablenbezeichnern weg.



  • Soweit so gut, danke für die Hilfe. 🙂

    #include<iostream>
    
    using namespace std;
    
    int fakultaet(int zahl)
    {
    	if (zahl>1)
    		return zahl * fakultaet(zahl - 1);
    	else
    		return 1;
    }
    int main()
    {
    	int zahl;
    	cin >> zahl;
    	cout << endl << fakultaet(zahl) << endl;
    }
    

    ist bei mir jetzt rausgekommen nach ein wenig hin und her probieren.
    Ergebnisse werden auch richtig zurückgegeben etc, alles wunderbar. 🙂
    Hatte grade noch die Frage warum return 1 und nicht return 0, aber hat sich von selbst erklärt 😃
    Hoffe alle sind zufrieden damit 🙂
    Kurzes Statement und/oder Verbesserungsvorschläge sind gerne gesehen. 😋

    EDIT: Umlaute sind jetz auch weg 😃



  • xStrykex schrieb:

    ist bei mir jetzt rausgekommen nach ein wenig hin und her probieren.

    Aha, du hast es also selbst gemacht.

    xStrykex schrieb:

    Hatte grade noch die Frage warum return 1 und nicht return 0, aber hat sich von selbst erklärt 😃

    Du hattest noch die Frage, warum du in deinem eigenen Code return 1 und nicht return 0 geschrieben hast? Na klar... Copy&Paste ftw! Hoch lebe das Internet! 😃



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wüsste nicht, warum ich aus dem Internet i-was kopieren sollte, wo ich es mir selber beibringen möchte und durch c&p mit Sicherheit kein großer Lernerfolg besteht 😉 zudem sind alle Lösungen im Buch vorhanden, der hat es leider nur etwas anders gemacht. 😕
    Deswegen habe ich eher etwas erwartet wie "Das ist keine Rekursion" 😃
    Mit "return 0" kam eben immer 0 bei raus, egal was geändert wurde, bei "return 1" das richtige Ergebnis, warum war logisch, wenn man es sich mal angeguckt hat (vorher nicht drüber nachgedacht).



  • Na wenn du selbst drauf gekommen bist, dann 👍 👍 👍



  • Danke 🙂
    Und danke für die Hilfe, werde jetzt wohl des Öfteren vorbeischnuppern 😃



  • Denk nochmal darüber nach, ob der Zahlen-/Werte-bereich deiner Funktion gut gewählt ist.
    (Bei 13! kommt bei aktuellen/üblichen Systemen schon Mist raus)



  • Habe es grade mit höheren Zahlen probiert und es kommen negative Ergebnisse raus, hoffe mal, dass du das meinst.
    Meine Grundgedanke dafür wäre "long" bzw "long long" zu verwenden anstatt von "int".

    EDIT: "unsigned" nicht zu vergessen 😃

    EDIT2:

    #include<iostream>
    
    using namespace std;
    
    unsigned long long fakultaet(unsigned long long zahl)
    {
    	if (zahl>1)
    		return zahl * fakultaet(zahl - 1);
    	else
    		return 1;
    }
    int main()
    {
    	unsigned long long zahl;
    	cin >> zahl;
    	cout << endl << fakultaet(zahl) << endl;
    
    	cin.get();
    }
    

Anmelden zum Antworten