输入参数N为台阶数,斐波那契数列的变形

问题描述:可以上一级,上两级和上三级,问有多少种方法走完N阶台阶。

解法思路:一级:1种走法。

二级:可以是1-1,2。共两种走法

三级:可以是1-1-1,1-2,2-1,3。共四种走法。

那么第四级的走法为前三级走法的和,因为,第一级直接走到第四级只有一种走法,那就是1-3,第二级直接走到第四级只能走2步也就是1-1-2和2-2两种,第三季直接走到第四级也是在原本的四种走法上走一步,即四种走法。那么可以推出递推公式:

f(4) = f(n-1)+(n-2)+f(n-3);

java代码

public class LadderDynamicProgramming {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        
        int a[] = new int[num];
        a[0] =  1;
        a[1] =  2;
        a[2] = 4;
        for (int i = 3; i < a.length; i++) {
            a[i] = a[i-1]+a[i-2]+a[i-3];
            System.out.println("第"+i+"级总的走法是:"+a[i]);
        }
        
        System.out.println("总的走法是:"+a[num-1]);
    }
}

 

斐波那契数列:
f(0)=0;
f(1)=1;
f(2)=f(1)+f(0);
f(3)=f(2)+f(1);
f(n) = f(n-1)+f(n-2);

代码
public class Algorithm {

    /**
     * 斐波那契数列非递归解法
     * @param n
     * @return
     */
    public static int Fibonacci(int n){
        int result[] = {0,1};
        if(n<2){
            return result[n];
        }
        int fibOne = 0,fibTwo=1,fibN=0;
        for (int i=2;i<=n;i++){
            fibN = fibOne+fibTwo;
            fibOne = fibTwo;
            fibTwo = fibN;
        }

        return fibN;
    }

    public static void main(String[] args) {
        System.out.println(Fibonacci(10));
    }
}

 

posted on 2018-07-18 16:23  HusterHuwentao  阅读(168)  评论(0编辑  收藏  举报