优点: 简洁+装B 代价:函数调用+系统栈空间 另外:使用递归,代码易不易读,这要因人而异,水平高的可能认为递归很易读,不递归反而罗里吧嗦的麻烦。 递归函数感觉就是自己调用自己,最后给自己一个台阶下 在此之前最好了解一下栈的机制:可参考:04-图解数据结构之栈--Stack
/**
* 作者:张风捷特烈
* 时间:2018/9/20 0020:16:45
* 邮箱:1981462002@qq.com
* 说明:一个简单的吃苹果递归
*/
public class AppleEaterClient {
public static void main(String[] args) {
Apple apple = new Apple(5);
eat(apple);
//苹果还剩4口
//苹果还剩3口
//苹果还剩2口
//苹果还剩1口
//苹果还剩0口
//苹果吃完了
}
private static void eat(Apple apple) {
if (apple.size <= 0) {
System.out.println("苹果吃完了");
return;
}
apple.size = apple.size - 1;
System.out.println("苹果还剩" + apple.size + "口");
eat(apple);
}
private static class Apple {
public int size;
public Apple(int size) {
this.size = size;
}
}
}
/**
* 作者:张风捷特烈
* 时间:2018/10/6 0006:21:46
* 邮箱:1981462002@qq.com
* 说明:2306====>依次打印2 3 0 6
*/
public class PrintInt {
public static void main(String[] args) {
printInt(2306);
}
private static void printInt(int num) {
if (num <= 0) {
return;
}
printInt(num / 10);
System.out.println(num % 10);
}
}
递归1.png
/**
* 作者:张风捷特烈
* 时间:2018/9/20 0020:16:56
* 邮箱:1981462002@qq.com
* 说明:递归求数组和
*/
public class Sum {
public static int sum(int[] arr) {
return sum(arr, 0);
}
/**
* 递归函数
* @param arr 数组
* @param start 开始位置
* @return 从开始位置到最后所有元素和
*/
private static int sum(int[] arr,int start) {
if (start == arr.length) {//终结点
return 0;
}
return arr[start] + sum(arr, start + 1);
}
public static void main(String[] args) {
System.out.println(sum(new int[]{1, 2, 3, 4}));
}
}
递归.png
结合栈结构,对递归debug一步步调试,或者自己画画图,更容易明白递归是怎么一步步走的,这是非常重要的。对于树的操作少不了递归,如果对递归有丝毫疑惑,那后面将会寸步难行。递归是一个小小的高山,是需要认真爬过去的,马马虎虎就想过去,不存在的。下一部分就将对二叉树全面攻打。
项目源码 | 日期 | 备注 |
---|---|---|
V0.1--无 | 2018-10-2 | 06--图解数据结构之递归小例子 |
V0.2--无 | - | - |
笔名 | 微信 | 爱好 | |
---|---|---|---|
张风捷特烈 | 1981462002 | zdl1994328 | 语言 |
我的github | 我的简书 | 我的CSDN | 个人网站 |
1----本文由张风捷特烈原创,转载请注明 2----欢迎广大编程爱好者共同交流 3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 4----看到这里,我在此感谢你的喜欢与支持