斐波那契数列

前言:
编程渣渣报名了蓝桥杯,不得不刷题来求个心理安慰,祈求获奖。同时也会更新一些刷题中遇到的问题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 一个正整数

如此出名的问题自然有多种解决方案,下面列举两种比较好理解的:

  1. 递归
    递归的缺点就是容易超时,但是代码易懂,简短。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;
}
  1. 循环
    在各大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;
}

欢迎大佬批评指正~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值