频道栏目
首页 > 资讯 > C++ > 正文

面试题9:斐波那契数列

13-07-23        来源:[db:作者]  
收藏   我要投稿


 

方法一:很容易想到的解法是直接使用递归。

C++代码:

 

#include "stdafx.h"   
#include <iostream>   
using namespace std;  
  
long long Fibonacci(unsigned int n)  
{  
    if (n == 0)  
    {  
        return 0;  
    }  
  
    if (n == 1)  
    {  
        return 1;  
    }  
  
    return Fibonacci(n-1) + Fibonacci(n-2);  
}  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    unsigned int n = 10;  
    cout << Fibonacci(n) << endl;  
    system("pause");  
    return 0;  
}  
#include "stdafx.h"
#include <iostream>
using namespace std;

long long Fibonacci(unsigned int n)
{
    if (n == 0)
    {
		return 0;
    }

	if (n == 1)
	{
		return 1;
	}

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

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned int n = 10;
	cout << Fibonacci(n) << endl;
	system("pause");
	return 0;
}

缺点:很显然效率很低,因为存在重复计算的问题。

 


方法二:改进方法是将已经得到的数列中间项保存起来,下次使用时直接查找即可,避免重复计算。

C++代码:

 

#include "stdafx.h"   
#include <iostream>   
using namespace std;  
  
long long Fibonacci(unsigned int n)  
{  
    if (n == 0)  
    {  
        return 0;  
    }  
  
    if (n == 1)  
    {  
        return 1;  
    }  
  
    long long one = 0;  
    long long two = 1;  
    long long result = 0;  
  
    for (unsigned int i=2; i<=n; i++)  
    {  
        result = one + two;  
        one = two;  
        two = result;  
    }  
  
    return result;  
}  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    unsigned int n = 100;  
    cout << Fibonacci(n) << endl;  
    system("pause");  
    return 0;  
}  
#include "stdafx.h"
#include <iostream>
using namespace std;

long long Fibonacci(unsigned int n)
{
    if (n == 0)
    {
		return 0;
    }

	if (n == 1)
	{
		return 1;
	}

	long long one = 0;
	long long two = 1;
	long long result = 0;

	for (unsigned int i=2; i<=n; i++)
	{
		result = one + two;
        one = two;
		two = result;
	}

	return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned int n = 100;
	cout << Fibonacci(n) << endl;
	system("pause");
	return 0;
}



 

相关TAG标签
上一篇:[Ubuntu]为/××××准备的磁盘尚未就绪或不存在解决
下一篇:用友分站SQL注入,可登录后台
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站