递归
什么叫递归:自己调用自己,直到满足一个条件结束自己调用自己的过程
关键:
1.递归出口
2.逐步向出口逼近
入门案例:求1+2+3+...+100的和
通过循环实现
package com.tohka.demos; //入门案例:求1+2+3+...+100的和 public class Demo1 { public static void main(String[] args) { System.out.println(getSum(100)); } //循环实现 public static int getSum(int number) { int sum = 0; for (int i = 1; i <= number; i++) { sum += i; } return sum; } }
通过递归实现
package com.tohka.demos; //入门案例:求1+2+3+...+100的和 public class Demo1 { public static void main(String[] args) { System.out.println(getSum(100)); } //递归实现 public static int getSum(int number) { int sum = 0; if(number == 1) { //递归出口 return 1; } else { return number + getSum(number -1); //向出口逼近 // 假设传递的参数为4 // getSum(4) = 4 +getSum(3) // = 4 + 3 +getSum(2) // = 4 + 3 + 2 +getSum(1) getSum(1)达到递归出口结果为1 // getSum(4) = 4 + 3 + 2 + 1 = 10 } } }
拓展拔高:斐波拉契数列之兔子案例
一对兔子从第三个月开始下一对小兔子,然后以后每个月都下一对,假设兔子长生不死
并且他们的崽子也是一样的去下小兔子,问N个月以后一共有多少对兔子?用递归实现
分析:
1 第一个月 | 1 第二个月 | 2 第三个月 | | 3 第四个月 | | | 5 第五个月 | | | | | 8 第六个月 | | | | | | | | 13 21 。 。 。 找到规律:斐波拉契数列:1 1 2 3 5 8 13 21......
代码实现
实现思路:
1.找到规律:从第三个月开始,后面一个月兔子数量等于前两个月之和
2.找到递归出口:第一个月、或者第二个月
3.逼近出口:当前月份前两个月兔子之和
package com.tohka.demos; //一对兔子从第三个月开始下一对小兔子,然后以后每个月都下一对, //假设兔子长生不死 并且他们的崽子也是一样的去下小兔子, //问N个月以后一共有多少对兔子?用递归实现 public class Demo2 { public static void main(String[] args) { System.out.println(getSum(5)); } public static int getSum(int month) { if(month == 1 || month ==2) { //递归出口 return 1; } else { //逼近递归出口 return getSum(month-1) +getSum(month -2); //假设求第五个月的兔子 //getSum(1) = 1; getSum(2) =1 都是递归出口 //getSum(5) = getSum(4) + getSum(3) // = getSum(3)+ getSum(2) + getSum(2) + getSum(1) // = getSum(2)+ getSum(1) +getSum(2) + getSum(2) + getSum(1) //getSum(5) = 1+1+1+1+1 = 5 } } }
BAT笔试真题
使用java递归解决汉诺塔问题
参考博客
https://blog.csdn.net/Hurricane_m/article/details/89043699