IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法图解之递归(二)(JAVA版本) -> 正文阅读

[数据结构与算法]算法图解之递归(二)(JAVA版本)

作者:recommend-item-box type_blog clearfix

阅读这篇文章就证明你已经开始踏上了算法的修仙之路,接下来我会两天更,介绍图解算法里面的算法的实现, 适合Java程序员阅读。


前言

提示:这里可以添加本文要记录的大概内容:

接上一篇文章, 这篇文章是练习中等难度的递归, 为后面学习快速排序, 打好基础, 循循渐进, 慢慢来。


提示:以下是本篇文章正文内容,下面案例可供参考

一、求数组的总值

1. 题目

求,myList = {2,4,6} 的总和不用循环

2. 代码

public class RecursionDemo {

    public static void main(String[] args) {
        //动态数组, add remove get size等操作
        ArrayList<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(4);
        list.add(6);

        //求列数组里面的总值
        Integer totalValue = totalValue(list,0);
        System.out.println("sum = " + totalValue);
    }

    //求数组的总值    -> 递归法
    public static Integer totalValue(ArrayList<Integer> list, Integer index) {
        if(index == list.size() - 1){
            return list.get(index); //基线条件
        }
        return list.get(index) + totalValue(list, ++index);//递归条件
    }
}

3.分析

请添加图片描述

对于求和而言, 循环肯定比递归更加容易懂且性能高。 对于这个题目的关键在于你如何把循环里面i值也转化到递归中去。所以我就用了每次递归index都进行++操作, 递归结束条件也是小于数组长度。

二、计算列表包含的元素数

1. 题目

编写一个递归函数来计算列表包含的元素数不用循环和内置函数

2. 代码

public class RecursionDemo {

    public static void main(String[] args) {
        //动态数组, add remove get size等操作
        ArrayList<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(4);
        list.add(6);

        //求数组里面包含的元素数
        Integer totalItem = totalItem(list,0);
        System.out.println("total = " + totalItem);
    }
    //求数组的总数   ->  递归法
    public static Integer totalItem(ArrayList<Integer> list, int index) {
        if(list.size() == index){
            return index;         //基线条件
        }
        return totalItem(list,++index);   //递归条件
    }
}

3.分析

请添加图片描述

我们的最终目的是为了练习递归,虽然Java里面有api去求数组的长度,自己现实一下也是可以的,这一题和上一题一样,也是利用了递归执行++操作,然后再利用数组的长度为递归的结束条件,最后index的最终值也是数组的长度 -1。

三、计算列表包含的元素数

1. 题目

找出列表的最大的数字 分别用循环和递归实现一遍。

2. 代码

public class RecursionDemo {

    public static void main(String[] args) {
        //动态数组, add remove get size等操作
        ArrayList<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(4);
        list.add(6);

        //利用递归找出列表最大值
        Integer maxItem = getMaxItem(list);

        //最大值索引
        Integer maxItemIndex = 0;
        Integer maxItem1 = getMaxItem1(list,0,maxItemIndex);
        System.out.println("循环法 max = " + maxItem);
        System.out.println("递归法 max = " + maxItem1);
    }


    // 求数组最大值   -> 利用循环法求最大值 反之最小值也一样
    public static Integer getMaxItem(ArrayList<Integer> list) {
        //最大值索引
        Integer maxItemIndex = 0;
        for(int i = 0; i < list.size(); i++){
            if(list.get(maxItemIndex) < list.get(i)){
                maxItemIndex = i;
            }
        }
        return list.get(maxItemIndex);
    }

    // 求数组最大值   -> 利用递归法求最大值 反之最小值也一样
    public static Integer getMaxItem1(ArrayList<Integer> list,Integer index,Integer maxItemIndex) {
        if(list.get(maxItemIndex) < list.get(index)){
            maxItemIndex = index;
        }
        if(index == list.size()-1){     //基线条件
            return list.get(maxItemIndex);
        }
        return getMaxItem1(list,++index,maxItemIndex);    //递归条件
    }

3.分析

请添加图片描述

对于求最大值, 其实递归和循环都有共同之处,都需要一个一个判断,然后选出一个最大值, 不同之处在于实现原理不同。递归需要基线条件和递归条件,而这一题的基线条件就是数组长度和循环结束的条件一样,只是方式不同。

总结

上一篇文章是介绍了递归的原理,这篇文章主要是给兄弟练练手的题目,如果想挑战更难的难度,可以去做汉诺塔问题,快速排序等问题。这一篇文章就是练习练习递归,让大家知道递归可能有时候比循环好,也可能比循环差,这需要自己去判断。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:22:23  更:2022-05-07 11:22:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:24:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码