前言:
编程渣渣报名了蓝桥杯,不得不刷题来求个心理安慰,祈求获奖。同时也会更新一些刷题中遇到的问题blog作为笔记,便于日后复习,希望能做到每天刷题呀!附上我们学校的刷题OJ:https://oj.ncutea.com/problems
斐波那契数列问题
Description
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda
Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1,
F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)现在给你一个整数n(n>=1),求斐波那契数列中第n项的值.Input 一个正整数n(n<=92)
Output 一个正整数
如此出名的问题自然有多种解决方案,下面列举两种比较好理解的:
- 递归
递归的缺点就是容易超时,但是代码易懂,简短。OJ上提交会Time out。
#include <stdio.h>
long F(int n){
if(n<=2)
return 1;
else
return F(n-2)+F(n-1); //递归
}
int main(){
int n;
scanf("%d",&n);
printf("%ld",F(n));
return 0;
}
- 循环
在各大OJ上提交这种一般是没问题的,不会超时。
#include <stdio.h>
long F(int n){
long f0=0,f1=1;
if(n==0)
return f0;
if(n==1)
return f1;
long fn=0;
int i;
for(i=2;i<=n;i++){
fn=f0+f1;
f0=f1;
f1=fn;
}
return fn;
}
int main(){
int n;
scanf("%d",&n);
printf("%ld",F(n));
return 0;
}
欢迎大佬批评指正~~