Copyright: 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);
}
So calculated (5,5) (4,5) (3,5) (2,5) (1,5) can result in the
// 记忆化递归方法
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