【算法】斐波那契数列--C++源代码(VS2015)
2017-09-25 11:24
417 查看
第一种方式 :
#include <iostream>
using namespace std;
//Fi = 0 + 1 + 1 + 2 + 3 + 5 + ...
//Fi(N) = Fi(N-2) + Fi(N-1)
int Fibonacci(int num)
{
int sum = 0;
if (0 == num || 1 == num)
return num;
sum = Fibonacci(num - 2) + Fibonacci(num - 1);
return sum;
}
int main()
{
int num = 10;
cout << "Fibonacci(" << num << ") = " << Fibonacci(num) << endl;
system("pause");
return 0;
}
评:算法复杂度是2^n,当num值较大时,程序可能崩溃(例如num=50)
第二种方式 :
#include <iostream>
using namespace std;
//Fi = 0 + 1 + 1 + 2 + 3 + 5 + ...
//Fi(N) = Fi(N-2) + Fi(N-1)
long long int Fibonacci(int num)
{
long long int f0 = 0;
long long int f1 = 1;
long long int f2 = 0;
for (int i = 2; i <= num; i++)
{
f2 = f0 + f1;
f0 = f1;
f1 = f2;
}
return f2;
}
int main()
{
int num = 50;
cout << "Fibonacci(" << num << ") = " << Fibonacci(num) << endl;
system("pause");
return 0;
}
评 : 算法复杂度n,效率高
第三种方式: 使用阶乘的方法进行求解,算法复杂度为logn,代码较为冗余,不建议使用
#include <iostream>
using namespace std;
//Fi = 0 + 1 + 1 + 2 + 3 + 5 + ...
//Fi(N) = Fi(N-2) + Fi(N-1)
int Fibonacci(int num)
{
int sum = 0;
if (0 == num || 1 == num)
return num;
sum = Fibonacci(num - 2) + Fibonacci(num - 1);
return sum;
}
int main()
{
int num = 10;
cout << "Fibonacci(" << num << ") = " << Fibonacci(num) << endl;
system("pause");
return 0;
}
评:算法复杂度是2^n,当num值较大时,程序可能崩溃(例如num=50)
第二种方式 :
#include <iostream>
using namespace std;
//Fi = 0 + 1 + 1 + 2 + 3 + 5 + ...
//Fi(N) = Fi(N-2) + Fi(N-1)
long long int Fibonacci(int num)
{
long long int f0 = 0;
long long int f1 = 1;
long long int f2 = 0;
for (int i = 2; i <= num; i++)
{
f2 = f0 + f1;
f0 = f1;
f1 = f2;
}
return f2;
}
int main()
{
int num = 50;
cout << "Fibonacci(" << num << ") = " << Fibonacci(num) << endl;
system("pause");
return 0;
}
评 : 算法复杂度n,效率高
第三种方式: 使用阶乘的方法进行求解,算法复杂度为logn,代码较为冗余,不建议使用
相关文章推荐
- 【算法】快速排序--C++源代码(VS2015)
- 【算法】Shell排序--C++源代码(VS2015)
- 【算法】分而治之(DivideAndConquer) -- C++源代码(VS2015)
- 【基础】随机数生成--C++源代码(VS2015)
- 【LeetNode2-1-7】Two sum--C++源代码(VS2015)
- 【LeetNode2-1-8】Three sum--C++源代码(VS2015)
- 图像处理之其他杂项(一)之MeanShift的目标跟踪算法opencv c++代码 VS2015+opencv3.2
- 【LeetNode2-1-9】Three sum closest--C++源代码(VS2015)
- 【基础】简析浅拷贝与深拷贝--C++源代码(VS2015)
- 【LeetNode2-1-10】Four sum--C++源代码(VS2015)
- 【LeetNode2-1-1】Remove duplicates from sorted array I--C++源代码(VS2015)
- 【LeetNode2-1-2】Remove duplicates from sorted array II--C++源代码(VS2015)
- 【设计】工厂模式--C++源代码(VS2015)
- 【基础】大端小端(Big-endian&Little-endian)--C++源代码(VS2015)
- 【LeetNode2-1-4】Search in rotated sorted array II--C++源代码(VS2015)
- 【LeetNode2-1-5】Median of two sorted arrays--C++源代码(VS2015)
- 【设计】单例模式--C++源代码(VS2015)
- 【LeetNode2-1-6】Longest consecutive sequence--C++源代码(VS2015)
- 算法导论 第13章 红黑树 C++源代码
- 【VS2015】c++实现windows系统版本、类型、语言识别