1071:菲波那契数
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 71894 通过数: 36980
【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。
【输入】
输入一行,包含一个正整数k。(1 ≤ k ≤ 46)
【输出】
输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小。
分析:使用循环运算即可,注意前面两个数是1.
#include<iostream>
using namespace std;
int main()
{
int k;
cin >> k;
int a = 1;//第k-1个数
int b = 1;//第k个数
int c;//记录前两个数之和,再赋值给后面
if (k <= 2)
{
cout << "1";
}
else
{
for (int i = 3; i <=k; ++i)
{
c = a + b;
a = b;
b=c;
}
cout << b;
}
}
我还想试试能不能用递归做,结果超时了。。。
#include <iostream>
using namespace std;
int test1(int a)
{
//把0去掉
if (a < 3)
{
return 1;
}
return test1(a - 1) + test1(a - 2);
}
int main()
{
int n;
cin>>n;
cout << test1(n);
}
不知道是我的代码的原因还是因为不能用递归做这道题,欢迎一起来讨论。