不死的兔
解法一:直接用循环的思想来解答
public class Test3 {public static void main(String[] args){// 解法1int[] arr=new int[12];arr[0]=1;arr[1]=1;//第一个月加第二个月等于第三个月的数量for (int i = 2; i < arr.length; i++) {arr[i]=arr[i-1]+arr[i-2];}System.out.println(arr[11]);//解法2System.out.println(getRabbit(12));}
解法二:
用递归的思想
递归的两大核心:找到递归出口
找到递归的规律
public class Test3 {public static void main(String[] args){//解法2System.out.println(getRabbit(12));}private static int getRabbit(int i) {if (i==0||i==1){return 1;}return getRabbit(i-1)+getRabbit(i-2);}}
吃猴的桃
我们还是用递归的方法来完成
首先找到递归的出口:第十天的时候
第十天:只剩1个
第九天:剩上一天加一个×2
第八天:第九天加一×2
........
public class Test3 {public static void main(String[] args){System.out.println(getMos(1));}private static int getMos(int i) {if(i<=0||i>=11){return -1;}//递归出口if (i==10){return 1;}else {return (getMos(i+1)+1)*2;}}}
爬楼的明:
从第一层往上面计算非常麻烦,我们可以从第19层开始看
当 n = 1 时,只有一种方法,即一次爬 1 阶,所以 f(1) = 1。
当 n = 2 时,有两种方法:一次爬 2 阶;分两次,每次爬 1 阶,所以 f(2) = 2。
当 n > 2 时,到达第 n 阶楼梯的最后一步可能是从第 n - 1 阶爬 1 阶上来的,也可能是从第 n - 2 阶爬 2 阶上来的。所以爬到第 n 阶楼梯的方法数等于爬到第 n - 1 阶楼梯的方法数加上爬到第 n - 2 阶楼梯的方法数,即 f(n) = f(n - 1) + f(n - 2)。
public class ClimbingStairs {public static int climbStairs(int n) {if (n == 1) {return 1;}if (n == 2) {return 2;}int first = 1;int second = 2;int third = 0;for (int i = 3; i <= n; i++) {third = first + second;first = second;second = third;}return third;}public static void main(String[] args) {int n = 5;int result = climbStairs(n);System.out.println("爬到第 " + n + " 阶楼梯的不同方法数为: " + result);}
}