爬楼梯(递归,记忆化递归,斐波那契数,动态规划方法)--Java实现

版权声明:071623 https://blog.csdn.net/weixin_43584220/article/details/89041415
/**
 * @author Ravanla
 * @create 2019-04-05-9:48
 */
public class climbStairs {
    public static void main(String[ ]args){
        System.out.println("递归方法+++++++++++++++++++++++++");
        System.out.println(f(0, 1));
        System.out.println(f(0, 2));
        System.out.println(f(0, 3));
        System.out.println(f(0, 4));
        System.out.println(f(0, 5));
        System.out.println(f(0, 6));
        System.out.println(f(0, 7));
        System.out.println(f(0, 8));

        System.out.println("记忆化递归方法+++++++++++++++++++++++++");
        int n = 8;
        int[] memory = new int[n + 1];
        System.out.println(f1(0, n, memory));

        System.out.println("动态规划方法+++++++++++++++++++++++++");
        System.out.println(f2(n));

        System.out.println("斐波那契数方法+++++++++++++++++++++++++");
        System.out.println(f3(n));
    }
//    递归方法
    private static int f(int i, int n){
        if(i > n)return 0;
        if(i == n)return 1;
        return f(i + 1, n) + f(i + 2, n);
    }

在这里插入图片描述
这样的话算出(5,5)(4,5)(3,5)(2,5)(1,5)的结果就可以了

//    记忆化递归方法
    private static int f1(int i, int n, int[] memory){
        if(i > n)return 0;
        if(i == n)return 1;
        if(memory[i] > 0)return memory[i];
        memory[i] = f1(i + 1, n, memory) + f1(i + 2, n, memory);
        return memory[i];
    }
//    动态规划方法
    private static int f2(int n){
        if(n == 1)return 1;
//         dynamic programming
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for(int i = 3; i <= n; i++){
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
//    斐波那契数方法
    private static int f3(int n){
        if(n == 1)return 1;
        int a = 1;
        int b = 2;
        for(int i = 3; i <= n; i++){
//            b+=a;
//            a = b - a;
//            上面两行代码拆开来就是下面三行代码;
            int c = a + b;
            a = b;
            b = c;
        }
        return b;
    }

递归方法+++++++++++++++++++++++++
1
2
3
5
8
13
21
34
记忆化递归方法+++++++++++++++++++++++++
34
动态规划方法+++++++++++++++++++++++++
34
斐波那契数方法+++++++++++++++++++++++++
34

猜你喜欢

转载自blog.csdn.net/weixin_43584220/article/details/89041415