求Fibonacci,递归,C++
代码
#include<iostream>
using namespace std;
//创建方法,Fibonacci的递归
int fun(int n);
int main() {
int n;
cout << "请输入n:";
cin >> n;
for(int i=1;i<=n;i++)
//输出调用fun
cout << endl<<"第"<<i<<"个的值为:"<<fun(i);
return 0;
}
int fun(int n) {
//当输入的n是1或者n是2时,返回输出1,fun(1)==1,fun(2)==1
if (n == 1 || n == 2)
return 1;
//当输入的数大于2时,递归调用
//如:当n=4时 fun(4-1)+fun(4-2)=fun(3)+fun(2)=fun(3)+1=(fun(3-1)+fun(3-2))+1=(fun(2)+fun(1))+1=(1+1)+1=4
//fun(4)=3
else
return fun(n - 1) + fun(n - 2);
}
浅改一下,看得更清楚
#include<iostream>
using namespace std;
//创建方法,Fibonacci的递归
int fun(int n);
int main() {
int n;
cout << "请输入n:";
cin >> n;
for (int i = 1; i <= n; i++) {
//输出调用fun
if(i==1||i==2)
cout << endl << "第" << i << "个的值为:" <<fun(i);
else
cout << endl << "第" << i << "个的值为:" <<fun(i-1)<<"+"<<fun(i-2) <<"=" << fun(i);
}
return 0;
}
int fun(int n) {
//当输入的n是1或者n是2时,返回输出1,fun(1)==1,fun(2)==1
if (n == 1 || n == 2)
return 1;
//当输入的数大于2时,递归调用
//如:当n=4时 fun(4-1)+fun(4-2)=fun(3)+fun(2)=fun(3)+1=(fun(3-1)+fun(3-2))+1=(fun(2)+fun(1))+1=(1+1)+1=4
//fun(4)=3
else
return fun(n - 1) + fun(n - 2);
}
时间复杂度
递归方法的时间复杂度是指数级的,是O(2^n)。这是因为在每一层递归中,都会有两个分支(n-1 和 n-2),导致指数级的调用。