17:菲波那契数列
总时间限制: 1000ms 内存限制: 65536kB
描述
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。
输入
输入一行,包含一个正整数k。(1 <= k <= 46)
输出
输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小
样例输入
19
样例输出
4181
解法一:递归解法(时间复杂度高)
#include<bits/stdc++.h>
using namespace std;
int func(int n){
if(n == 1 || n == 2){
return 1;
}
return func(n - 1) + func(n - 2);
}
int main()
{
int n;
cin >> n;
cout << func(n);
}
解法二:非递归解法
#include<bits/stdc++.h>
using namespace std;
int func(int n){
if(n == 1 || n == 2){
return 1;
}
int n1 = 1, n2 = 1, sum = 0;
for(int i = 3; i <= n; i++){
sum = n1 + n2;//2
n1 = n2;
n2 = sum;
}
return sum;
}
int main()
{
int n;
cin >> n;
cout << func(n);
}