码迷,mamicode.com
首页 > 其他好文 > 详细

计算fibonacci数(多种方法)

时间:2017-12-06 20:00:24      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:线性   复杂   std   pre   span   int   nbsp   --   turn   

#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;
}

 

计算fibonacci数(多种方法)

标签:线性   复杂   std   pre   span   int   nbsp   --   turn   

原文地址:http://www.cnblogs.com/panlangen/p/7994168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!