Was ist falsch an diesem Quellcode zur Berechnung der Fibonacci Zahlen?


  • Outlaw2k1
  • 1770 Aufrufe 5 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Was ist falsch an diesem Quellcode zur Berechnung der Fibonacci Zahlen?

    HI!

    Ich hab mal wieder ein Problem in C!

    Es geht darum ein Programm zur Berechnung der Fibonacci Zahlen zu schreiben, und zwar mittels eineer while und einer do, while Schleife!

    Mein Quelltext sieht so aus:

    #include <stdio.h>

    /////////////////////////////////////
    ///////// While Schleife ////////////
    ////////////////////////////////////


    int fibow(int a) {

    if (a==0){
    return 0;
    }
    if (a==1){
    return 1;
    }
    while (a >=2)
    return fibow(a - 1) + fibow(a - 2);

    }

    ////////////////////////////////////
    ////////// do while Schleife ///////
    ///////////////////////////////////

    int fibod(int a){

    do {
    return fibod(a - 1) + fibod(a - 2);
    }
    while (a >= 2);

    if (a==0){
    return 0;
    }
    if (a==1){
    return 1;
    }
    }

    int main ()
    {

    int zahl;
    printf (" Zahl: \n");
    scanf ("%i", &zahl);
    printf ("Fibonacci von %i lautet mit while Schleife : %i", zahl, fibow(zahl));
    printf ("\nFibonacci von %i lautet mit do, while Schleife ; %i", zahl, fibod(zahl));
    }


    Nun das Problem warum funktioniert die do, while Schleife nicht?

    Beim Compilieren bringt er mir keine Fehler nur wenn ich das Programm dan ausführe kommt ne Fehlermeldung:

    Die Ausnhame "unknown software exception" (0x00000fd) ist in der Anwendung aufgetreten

    Hatt jemand ne Idee von euch an was das liegen könnte??

    Mfg Outlaw2k1
  • also das:

    Quellcode

    1. int fibow(int a)
    2. {
    3. if (a==0)
    4. {
    5. return 0;
    6. }
    7. if (a==1)
    8. {
    9. return 1;
    10. }
    11. while (a >=2)
    12. return fibow(a - 1) + fibow(a - 2);
    13. }
    Alles anzeigen


    sieht gut aus ..

    und bei der do while probier mal die do while an die gleiche stelle zu setzen wie die while.

    die machen ja in diesem sinne nichts anderes, nur wenn du in deiner fibod ne 1 übergibst steigt die funktion ja erst in die rekursion, da die do while keine abweisende schleife ist! ;)

    also so:

    Quellcode

    1. int fibod(int a)
    2. {
    3. if (a==0)
    4. {
    5. return 0;
    6. }
    7. if (a==1)
    8. {
    9. return 1;
    10. }
    11. do
    12. {
    13. return fibod(a - 1) + fibod(a - 2);
    14. }
    15. while (a >= 2);
    16. }
    Alles anzeigen


    hope, das klappt!?
  • Warum willst du eigentlich die while und do while Schleife verwenden. Reicht doch, wenn du nur die while verwendest?

    do while ist ja nur ne "Sonderfunktion" der while-Schleife...

    und die nimmt man nur, wenn es die Situation erfordert, man sollte nie solche SItuationen erzwingen, wenn es dann "unübersichtlicher", "unlogischer" wird. Man sollte wenn man die Funktion sieht auf einen Blick alles verstehen ohne groß oder auch nur etwas zu überlegen...so hab ich's gelernt... :)