|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是
斐波那契数列是指这样的数列:第一个数和第二个数都为1,接下来每个数都等于前面2个数之和。编程输入一个正整数k
,输出斐波那契数列第k
个数。
输入描述
一行一个正整数k
,1≤k≤46
。
输出描述
一行一个正整数,表示斐波那契数列第k
个数的大小。- #include<stdio.h>
- int f(int x)
- {
- int y;
- if(x==1||x==2) y=1;
- else y=f(x-1)+f(x-2);
- return y;
- }
- int main()
- {
- int k;
- scanf("%d",&k);
- printf("%d",f(k));
- }
复制代码
这个代码使用递归实现了斐波那契数列,但是对于较大的k值,递归的时间复杂度会非常高,导致程序运行时间超限。可以使用循环迭代的方式来实现斐波那契数列,时间复杂度为O(n)。代码如下:
- #include <stdio.h>
- int main()
- {
- int k;
- scanf("%d", &k);
- int a = 1, b = 1, c;
- if (k == 1 || k == 2) c = 1;
- else {
- for (int i = 3; i <= k; i++) {
- c = a + b;
- a = b;
- b = c;
- }
- }
- printf("%d", c);
- return 0;
- }
复制代码
在这个代码中,使用了三个变量a、b、c来保存斐波那契数列中的前两个数和当前数,使用循环迭代的方式计算斐波那契数列中第k个数的值。
|
|