刚开始写算法博客,就从比较简单的算法实现开始吧
斐波那契(Fibonacci)序列
首先先简单说一下Fibonacci序列,Fibonacci序列的第一个和第二个数都是1,后面每一位数都是它的前两个数的和 eg:1,1,2,3,5,8,13,21,34,…
然后是几种实现算法,
那么我就用c++来实现下 (1)我觉得需要注意的是如果要实现一种算法,最好是让它封装在一个方法中,这样代码清晰而且代码可重用性就大大的提高了,所以我这里不再赘述直接在主方法中实现算法的方法,因为不想让这种方法影响思维。 (2)最先想到的递归算法肯定是循环
#include<iostream>
using namespace std;
long Fibonacci(long n) {//n是所需Fibonacci序列的第n个数
int first = 1;
int second = 1;
int next = 0;
if (n <= 2)
return 1;
else {
for (int i = 3; i <= n; i++) {
next = first + second;
first = second;
second = next;
}
return next;
}
}
int main() {
long n;
cout << "Enter the length of the Fibonacci sequence:";
cin >> n;
cout<<"The "<<n<<"th Fibonacci number is "<< Fibonacci(n)<<endl;
return 0;
}
这种算法的时间复杂度是O(n),空间复杂度是O(1)
(3)下面用最先想到的递归来实现
#include<iostream>
using namespace std;
long Fibonacci(long n) {//n是所需Fibonacci序列的第n个数
int first = 1;
int second = 1;
if (n < 3) {
return 1;
}
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
int main() {
long n;
cout << "Enter the length of the Fibonacci sequence:";
cin >> n;
cout<<"The "<<n<<"th Fibonacci number is "<< Fibonacci(n)<<endl;
return 0;
}
这种算法的时间复杂度是O(2^n),空间复杂度是O(n)
(4)这次用尾递归实现
#include<iostream>
using namespace std;
//f1是第n-1个Feibonacii数,f2是第n-2个Fibonacci数,n是所需Fibonacci序列的第n个数
long Fibonacci(long f1,long f2,long n) {
if (n < 3)
return f1;
else
return Fibonacci(f1 + f2 , f1 , n - 1);
}
int main() {
long n;
cout << "Enter the length of the Fibonacci sequence:";
cin >> n;
cout<<"The "<<n<<"th Fibonacci number is "<< Fibonacci(1,1,n)<<endl;
return 0;
}
这种算法的时间复杂度是O(n),空间复杂度是O(1)