0%

斐波那契数列

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #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;
    }
  2. 循环
    在各大OJ上提交这种一般是没问题的,不会超时。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #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;
    }

欢迎大佬批评指正~~

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道