Probleme mit GNU MP



  • Hi,

    folgendes Programm soll später einmal die Fibonacci-Folge bis zu einem sehr großen Zahlbereich bearbeiten:

    #include <iostream>
    #include <gmp.h>
    #include <gmpxx.h>
    
    using namespace std;
    
    mpz_class fib (mpz_class n)
    {
    	if (n == 2)
    		return 1;
    	else if (n == 1)
    		return 1;
    	else
    	{
    		return fib (n - 1) + fib (n - 2);
    	}
    }
    
    int main () {
    	for (int i = 0; i < 10; i++) {
    		mpz_class n = i;
    		cout << fib(n);
    	}
    
    	return 0;
    }
    

    Ich hab es mit der GNU MP Library gemacht. Leider bekomme ich als Ausgabe nur:

    Segmentation fault
    

    Das gleiche Programm mit einer anderen int main gibt eine richtige Ausgabe:

    int main () {
    cout << fib(10);
    return 0;
    }
    

    Das gibt richtigerweise 55 aus.

    Wo liegt das Problem?

    Vielen Dank

    Joachim



  • Ich hab zwar keine Ahnung von GNU MP, aber wenn es dir nur darum geht, große Fibonacci-Zahlen zu berechnen. Dafür gibt es eine geschlossene Formel ohne Rekursion.



  • Der Fall fib(0); ist auch nicht abgefangen.

    fib(0) = fib(0 - 1) + fib( 0 - 2)

    mpz_class fib (mpz_class n)
    {
        if(n == 0)
            return 0;
        else if(n == 1)
            return 1;
        else
        {
            return fib(n - 1) + fib(n - 2);
        }
    }
    

Anmelden zum Antworten