您的位置:首页 > 职场人生

【面试题】剑指offer09--递归法和非递归法斐波那契数列的第n个数

2017-06-14 10:57 239 查看
斐波那契数列指的是这样一个数列
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597

求一个斐波那契数列的第几个数:

第一个方法是使用递归的方法:
求第n个数字时,先求出 第n-1的个数字,再求出第n-2个数字,依次往下推
但是这样的话,效率太低,因为会有很多重复的,例如求第8个数字,课画出图如下:



代码实现:

//Q1:写一个函数,求斐波那契是咧的第n项

#include<iostream>
using namespace std;

long long Finonacci(int n)
{
if (n <= 0)
{
return 0;
}
if (n == 1)
{
return 1;
}
return Finonacci(n - 1) + Finonacci(n - 2);
}
int main()
{
int n = 0;
int result = 0;
cout << "请输入一个数字:";
cin >> n;
result = Finonacci(n);
cout << "递归法:求第" << n << "个斐波那契数为:" << result << endl;
system("pause");
return 0;
}
运行结果:


 

       


用非递归法求解:从最前面往后求解:
如下图:



代码实现:

//Q1:写一个函数,求斐波那契是咧的第n项

#include<iostream>
using namespace std;
long long Finonacci(int n)
{
int arr[2] = { 0, 1 };
if (n < 2)
{
return arr
;
}
long FibOne = 1;
long FibTwo = 0;
long Fib = 0;
for (unsigned int i = 2; i <= n;i++)
{
Fib = FibTwo + FibOne;
FibTwo = FibOne;
FibOne = Fib;
}
return Fib;
}

int main()
{
int n = 0;
int result = 0;
cout << "请输入一个数字:";
cin >> n;
result = Finonacci(n);
cout <<"非递归法:求第"<<n<<"个斐波那契数为:"<<result << endl;
system("pause");
return 0;
}

运行结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息