Home > NULL > Fibonacci in C

Fibonacci in C

Normaal gesproken wordt een Fibonacci reeks gedaan met behulp van recursie, als volgt:

unsigned long long fibonacci(int n)
{
    if (n <= 0) { return (0); }
    if (n <= 2) { return (1); }

    return (fibonacci(n-1) + fibonacci(n-2));
}

Naar aanleiding van een simpele Fibonacci reeks functie grotendeels gemaakt door Patrick Smits, kan dit een stuk sneller, zonder recursie, maar met itteratie.

unsigned long long fibonacci_list(int reset)
{
    // Zie je wel Albert Mietus, je hebt slechts 2 variabelen nodig :)
    static unsigned long long a=0, b=0;
    if (reset!=0) { a=0; b=0; }
    return ((a==0) ? ((b==0) ? a++ : ++a)
                   : ((b==0) ? (b+=a--) : ((a<b) ? (a+=b) : (b+=a))));
}

unsigned long long fibonacci_first(void)
{
    return (fibonacci_list(1));
}

unsigned long long fibonacci_next(void)
{
    return (fibonacci_list(0));
}

unsigned long long fibonacci(int n)
{
    unsigned long long f = fibonacci_first();

    int i;
    for (i = 1; i <= n; i++) { f = fibonacci_next(); }

    return (f);
}
Tags: , , ,
  1. No comments yet.
  1. No trackbacks yet.