Fibonacci Function Question

前端 未结 8 1142
春和景丽
春和景丽 2020-12-31 21:22

I was calculating the Fibonacci sequence, and stumbled across this code, which I saw a lot:

    int Fibonacci (int x)
{
    if (x<=1) {
        return 1;
         


        
8条回答
  •  难免孤独
    2020-12-31 21:45

    return Fibonacci (x-1)+Fibonacci (x-2);

    This is terribly inefficient. I suggest the following linear alternative:

    unsigned fibonacci(unsigned n, unsigned a, unsigned b, unsigned c)
    {
        return (n == 2) ? c : fibonacci(n - 1, b, c, b + c);
    }
    
    unsigned fibonacci(unsigned n)
    {
        return (n < 2) ? n : fibonacci(n, 0, 1, 1);
    }
    

    The fibonacci sequence can be expressed more succinctly in functional languages.

    fibonacci = 0 : 1 : zipWith (+) fibonacci (tail fibonacci)
    
    > take 12 fibonacci
    [0,1,1,2,3,5,8,13,21,34,55,89]
    

提交回复
热议问题