06--图解数据结构之递归小例子

mac2022-06-30  123

零、前言--递归:

优点: 简洁+装B 代价:函数调用+系统栈空间 另外:使用递归,代码易不易读,这要因人而异,水平高的可能认为递归很易读,不递归反而罗里吧嗦的麻烦。 递归函数感觉就是自己调用自己,最后给自己一个台阶下 在此之前最好了解一下栈的机制:可参考:04-图解数据结构之栈--Stack


1.吃苹果
/** * 作者:张风捷特烈 * 时间: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; } } }
2.拆分整数
/** * 作者:张风捷特烈 * 时间: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
3.递归求数组和
/** * 作者:张风捷特烈 * 时间: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
4.将一个十进制转换为n进制
/** * 作者:张风捷特烈 * 时间:2018/10/10 0010:15:23 * 邮箱:1981462002@qq.com * 说明:将一个十进制转换为n进制 */ public class ScaleTo { public static void main(String[] args) { scaleTo(77772, 2);//10010111111001100 scaleTo(77772, 8);//227714 scaleTo(77772, 16);//12FCC } /** * 将一个十进制转换为n进制 * * @param num 数字 */ private static void scaleTo(int num, int n) { char[] chars = new char[]{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; if (num == 0) { return; } scaleTo(num / n, n); int i = num % n; System.out.print(chars[i]); } }

结合栈结构,对递归debug一步步调试,或者自己画画图,更容易明白递归是怎么一步步走的,这是非常重要的。对于树的操作少不了递归,如果对递归有丝毫疑惑,那后面将会寸步难行。递归是一个小小的高山,是需要认真爬过去的,马马虎虎就想过去,不存在的。下一部分就将对二叉树全面进攻。


后记:捷文规范

1.本文成长记录及勘误表
项目源码日期备注V0.1--无2018-10-206--图解数据结构之递归小例子V0.2--无2018-10-10添加:将一个十进制转换为n进制的递归
2.更多关于我
笔名QQ微信爱好张风捷特烈1981462002zdl1994328语言我的github我的简书我的个人网站
3.声明

1----本文由张风捷特烈原创,转载请注明

2----欢迎广大编程爱好者共同交流 3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 4----看到这里,我在此感谢你的喜欢与支持

转载于:https://www.cnblogs.com/toly-top/p/9781853.html

最新回复(0)