美文网首页
2、斐波那契数列求第n位数值

2、斐波那契数列求第n位数值

作者: 圣巨猿 | 来源:发表于2018-03-30 15:19 被阅读0次

    斐波那契数列


    1. 什么是斐波那契数列?
    0,1,1,2,3,5......;数学函数:f(n) = f(n-1) + f(n-2);
    
    1. 非递归实现
    int fibonacci(int n) {
        int result =0;
        int a =1;
        int b =1;
    
        if(n ==0) {
            return result;
        }
        if(n ==1||n ==2) {
            result = a;
            return result;
        }
    
        for(int i =3; i < n; i++) {
            result = a + b;
            a = b;
            b = result;
        }
    
        return result;
    }
    
    1. 递归实现
    int recursiveFibonacci(int n) {
        if(n ==0) {
            return 0;
        }
    
        if(n ==1||n ==2) {
            return 1;
        }
    
        return recursiveFibonacci(n - 1) + recursiveFibonacci(n - 2);
    }
    
    1. 其他斐波那契数列问题
    • 跳台阶问题:

      • 一只青蛙一次可以跳上1级台阶,也可以跳上2级

      求该青蛙跳上一个n级的台阶总共有多少种跳法。第n级台阶跳法等于第n-1级跳1步跟第n-2级跳2步,所以还是斐波那契数列f(n)=f(n-1)+f(n-2)

    • 变态跳台阶问题:

      • 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

      青蛙只跳1或2可以得出是一个斐波那契问题,即a[n]=a[n-1]+a[n-2],那么能跳1,2,3个台阶时a[n]=a[n-1]+a[n-2]+a[n-3],......依次类推,能推出a[n]=a[n-1]+a[n-2]+......+a[1];然后a[n-1]=a[n-2]+a[n-3]+......+a[1];那么两个公式相减a[n]-a[n-1]=a[n-1];所以a[n]=2a[n-1]。

    int jumpFloorII(int number) {
        if (number < 2)
            return 1;
        int a = 1;
        int r = 0;
        for (int i = 2; i <= number; i++) {
            r = 2*a;
            a = r;
        }
        return r;
    }
    

    相关文章

      网友评论

          本文标题:2、斐波那契数列求第n位数值

          本文链接:https://www.haomeiwen.com/subject/vijicftx.html