前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >06--图解数据结构之递归小例子

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

作者头像
张风捷特烈
发布2018-10-08 10:26:57
4990
发布2018-10-08 10:26:57
举报
文章被收录于专栏:Android知识点总结
零、前言--递归:

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


1.吃苹果
代码语言:javascript
复制
/**
 * 作者:张风捷特烈
 * 时间: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.拆分整数
代码语言:javascript
复制
/**
 * 作者:张风捷特烈
 * 时间: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.递归求数组和
代码语言:javascript
复制
/**
 * 作者:张风捷特烈
 * 时间: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一步步调试,或者自己画画图,更容易明白递归是怎么一步步走的,这是非常重要的。对于树的操作少不了递归,如果对递归有丝毫疑惑,那后面将会寸步难行。递归是一个小小的高山,是需要认真爬过去的,马马虎虎就想过去,不存在的。下一部分就将对二叉树全面攻打。


后记:捷文规范
1.本文成长记录及勘误表

项目源码

日期

备注

V0.1--无

2018-10-2

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

V0.2--无

-

-

2.更多关于我

笔名

QQ

微信

爱好

张风捷特烈

1981462002

zdl1994328

语言

我的github

我的简书

我的CSDN

个人网站

3.声明

1----本文由张风捷特烈原创,转载请注明 2----欢迎广大编程爱好者共同交流 3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 4----看到这里,我在此感谢你的喜欢与支持

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.10.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、前言--递归:
    • 1.吃苹果
      • 2.拆分整数
        • 3.递归求数组和
        • 后记:捷文规范
          • 1.本文成长记录及勘误表
            • 2.更多关于我
              • 3.声明
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档