全网最菜的教程 斐波那契—如此简单

179 阅读1分钟

学算法,数据结构的话动态规划,递归是永远躲不去的坑,今天带大家看几道斐波那契数列数,平时这种问题在课堂上一般都是用递归的方法写的,可是一般的递归又看不懂到底核心是啥情况,这次的算法,我用非递归写斐波那契数列,希望能帮助大家入个门,而且实际上非递归效率更高。 这次选的是剑指Office中的几道题。

根据斐波那契的规律 f(n) = f(n-1)+f(n-2); 我们会想到递归的代码

public class Solution {
    public int Fibonacci(int n) {
        if(n<=0) {
            return 0;
        }
        if(n==1) {
            return 1;
        }
        returnFibonacci(n-2)+Fibonacci(n-1);
    }
}

以及一般不会教授的非递归版

public class Solution {
    public int Fibonacci(int n) {
        if(n<=0) return(0);
        else if(n<=2) return(1);
        int a=1;
        int b=1;
        int sum = 0;
        for(int i=3;i<=n;i++){
            sum = a+b;
            a= b;
            b = sum;
        }
        return sum;
    }
}

第一题当然很简单,同类的还有跳台阶

public class Solution {
    public int JumpFloor(int target) {
        if(target <4)
            return target;
        else {
            int temp1=1;
            int temp2 = 2;
            int temp = 3;
            for(int i=3;i<=target ;i++){
                temp = temp1+temp2;
                temp1 = temp2;
                temp2 = temp;
            }
            return temp;
        }
    }
}

以及矩阵覆盖问题

public class Solution {
    public int RectCover(int target) {
        if(target == 1)
            return 1;
        if(target == 2)
            return 2;
        int a=1;
        int b=2;
        int sum = 0;
        for(int i=3;i<=target;i++){
            sum = a+b;
            a=b;
            b=sum;
        }
        return sum;
    }
}