斐波那契数列指的是这样一个数列 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[n];
}
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;
}
运行结果: