计算fibonacci数(多种方法)

#include  <iostream>
using namespace std;

//计算fibonacci数

//方法一:二分递归法,时间复杂度为O(2^n),额外空间复杂度为常数
int RecursiveFibonacci(int n)
{
    return (n < 2) ? n : RecursiveFibonacci(n - 1)+RecursiveFibonacci(n-2);
}
//方法二:线性递归,时间复杂度为O(n),空间复杂度为O(n)
int LinearrecursionFibnoacci(int n,int& prev)//要用到引用,要不不可以!!!!
{
    if (n == 0)
    {
        prev = 1;
        return 0;
    }
    else
    {
        int prevPrev;
        prev = LinearrecursionFibnoacci(n - 1, prevPrev);
        return prevPrev + prev;
    }
}
//方法三:迭代法,时间复杂度为O(n),空间复杂度为常数
int IterationFibonacci(int n)
{
    int f = 1, g = 0;
    while (n--)
    {
        g += f;
        f = g - f;
    }
    return g;
}

int main()
{
    int num_1,num_2,num_3;
    int f=0;
    num_1 = RecursiveFibonacci(24);
    num_2 = LinearrecursionFibnoacci(24, f);
    num_3 = IterationFibonacci(24);
    cout << num_1 << endl;
    cout << num_2 << endl;
    cout << num_3 << endl;
    return 0;
}

 

posted @ 2017-12-06 18:17  P_langen  阅读(479)  评论(0编辑  收藏  举报