返回顶部
首页 > 资讯 > 精选 >基于Java递归算法的封装解决方法是什么
  • 225
分享到

基于Java递归算法的封装解决方法是什么

2023-06-02 11:06:08 225人浏览 独家记忆
摘要

本篇内容介绍了“基于Java递归算法的封装解决方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、递归算法1、概念简介递归算法的核心

本篇内容介绍了“基于Java递归算法的封装解决方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、递归算法

1、概念简介

递归算法的核心思想是通过将问题重复分解为同类的或其子问题的方式,从而可以使用统一的解决方式。很多编程语言支持方法或函数自我调用,简单的说,就是在函数或方法体内,自身可以再次调用自身的方法结构。

2、基础案例

这里通过递归的方式,计算阶乘、求和等相关逻辑。

public class Demo01 {    public static void main(String[] args) {        int result1 = factorial(5);        System.out.println(result1);        int result2 = sum(100) ;        System.out.println(result2);    }    // 递归阶乘    private static int factorial (int n){        if(n <= 1){            return n ;        }else{            return n*factorial(n-1);        }    }    // 递归求和    private static int sum (int f){        if(f <= 1){            return f ;        }else{            return f + sum(f-1);        }    }}

3、注意事项

  • 使用方法

使用递归的时候,要明确业务逻辑可以分解为重复相同的问题,且要清楚的知道递归的结束条件,不然很容易出现死循环。

  • 优缺点描述

递归算法的代码比较简洁,可读性较好;但是在实际的业务处理中会出现多次的重复调用,如果处理不好,很容易出现StackOverflowError报错。

二、树状结构

1、概念描述

树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。

2、图解和定义

基于Java递归算法的封装解决方法是什么

  • 根节点

树的根源,没有父节点的节点,如上图A节点。

  • 兄弟节点

拥有同一父节点的子节点。如图B与C与D节点。

  • 叶子节点

没有子节点的节点。如图E和F等节点。

  • 分支度

指一个节点有几个子节点。 如:A为3、B为2。

  • 节点深度

指从该节点到某一节点的最长路径。如图A为2、B为1。

三、应用场景

1、场景描述

基于递归算法下,处理很多树形结构的业务数据。常见的业务场景如下:

  • 省市区三级联动查询 ;

  • 系统模块、菜单、按钮的授权 ;

  • 常见的业务数据分类:商品分类等 ;

  • 常见各种行业分类细化 ;

2、特殊场景

在管理系统中,对系统模块、菜单、按钮授权操作时候可能会出现如下情况。

基于Java递归算法的封装解决方法是什么

假如系统管理员的权限如图所示,但是给到运营人员的权限如下,需要把3号菜单和5号菜单设置为同级别,这时候基本的处理手法就是把3号菜单父级ID作为3号菜单和下属功能的权限的根节点,这里把这里当成两颗树进行分别处理,最后合并数据就好。必要时按照配上节点编码,例如node01,NODE0101,NODE0102等方式,这里针对这个场景描述,就是希望在处理类似业务时候,思路要开阔,不必拘泥于单个树形结构。业务很多时候都是出人意料甚至是令人生厌,不过这确实就是生活

3、工具类封装

这里展示一个树形结构常用的几个封装方法,例如创建树形结构,遍历,判断等。

import java.util.ArrayList;import java.util.List;public class ThreeUtil {        private static List<ThreeNode> getTree(List<ThreeNode> nodeList, Integer parentId) {        List<ThreeNode> threeNodeList = new ArrayList<>() ;        for (ThreeNode entity : nodeList) {            Integer nodeId = entity.getId() ;            Integer nodeParentId = entity.getParentId() ;            if (parentId.intValue() == nodeParentId.intValue()) {                List<ThreeNode> childList = getTree(nodeList,nodeId) ;                if (childList != null && childList.size()>0){                    entity.setChildNode(childList);                    entity.setChildNodeSize(childList.size());                }                threeNodeList.add(entity) ;            }        }        return threeNodeList ;    }        private static List<ThreeNode> getChildTree (Integer id,List<ThreeNode> nodeList){        List<ThreeNode> resultList = new ArrayList<>();        for (ThreeNode entity : nodeList) {            if (entity.getParentId().intValue() == id) {                List<ThreeNode> childList = getChildTree(entity.getId(),nodeList) ;                entity.setChildNode(childList);                entity.setChildNodeSize(childList.size());                resultList.add(entity) ;            }        }        return resultList ;    }        private static transient List<Integer> treeIdList = new ArrayList<>() ;    private static List<Integer> getTreeInfo (List<ThreeNode> treeList){        for (ThreeNode entity : treeList) {            if (entity.getChildNodeSize()!=null && entity.getChildNodeSize()>0){                getTreeInfo(entity.getChildNode());            }            treeIdList.add(entity.getId());        }        return treeIdList ;    }        private static boolean hasChildNode (Integer id,List<ThreeNode> nodeList){        for (ThreeNode entity:nodeList){            if (entity.getParentId().intValue() == id){                return true ;            }        }        return false ;    }    public static void main(String[] args) {        List<ThreeNode> threeNodeList = new ArrayList<>() ;        threeNodeList.add(new ThreeNode(1,"节点A",0)) ;        threeNodeList.add(new ThreeNode(2,"节点B",1)) ;        threeNodeList.add(new ThreeNode(3,"节点C",1)) ;        threeNodeList.add(new ThreeNode(4,"节点D",1)) ;        threeNodeList.add(new ThreeNode(5,"节点E",2)) ;        threeNodeList.add(new ThreeNode(6,"节点F",2)) ;        // 测试1        List<ThreeNode> getTree = getTree(threeNodeList,0) ;        System.out.println(getTree);        // 测试2        // List<ThreeNode> getChildTree = getChildTree(2,threeNodeList) ;        // System.out.println(getChildTree);        // 测试3        List<Integer> treeIdList = getTreeInfo(getTree) ;        System.out.println(treeIdList);        // 测试4        System.out.println(hasChildNode(2,threeNodeList)) ;    }}

“基于Java递归算法的封装解决方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 基于Java递归算法的封装解决方法是什么

本文链接: https://lsjlt.com/news/229890.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于Java递归算法的封装解决方法是什么
    本篇内容介绍了“基于Java递归算法的封装解决方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、递归算法1、概念简介递归算法的核心...
    99+
    2023-06-02
  • Java基于递归解决全排列问题算法示例
    本文实例讲述了Java基于递归解决全排列问题算法。分享给大家供大家参考,具体如下:排列问题设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排...
    99+
    2023-05-30
    java 递归 全排列
  • 什么是递归算法
    这篇文章主要介绍“什么是递归算法”,在日常操作中,相信很多人在什么是递归算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是递归算法”的疑惑有所帮助!接下来,请跟着小编一...
    99+
    2024-04-02
  • Java的递归算法详解
    目录一、介绍1、介绍2、案例二、迷宫问题三、八皇后问题四、汉诺塔问题1、问题2、思想3、代码总结一、介绍 1、介绍 递归:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助...
    99+
    2024-04-02
  • python中什么是递归算法
    本篇文章为大家展示了python中什么是递归算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均...
    99+
    2023-06-14
  • java递归求阶乘的方法是什么
    Java中可以使用递归求阶乘的方法如下所示:```javapublic class Factorial {public static...
    99+
    2023-08-16
    java
  • 基于React封装一个组件的方法是什么
    这篇文章主要讲解了“基于React封装一个组件的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于React封装一个组件的方法是什么”吧!antd 是如何封装组件的仓库地址divi...
    99+
    2023-06-29
  • Java二叉树的递归和非递归遍历方法是什么
    本篇内容主要讲解“Java二叉树的递归和非递归遍历方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java二叉树的递归和非递归遍历方法是什么”吧!前言二叉树的遍历方法分为前序遍历,中序遍...
    99+
    2023-06-30
  • 基于Java语言的递归运算例题详解
    目录一、实例演示:递归求N的阶乘二、 递归调用练习递归求1+2+3+……10的和顺序打印一个数字的每一位返回一个数组成本身的数字之和求解汉诺塔问题求斐波那...
    99+
    2022-11-13
    Java递归运算 Java递归
  • Sqlsugar基类封装的方法是什么
    Sqlsugar基类封装的方法包括以下几种: 查询数据方法:通过Select、GetList、GetPageList等方法来查询数...
    99+
    2024-04-09
    Sqlsugar
  • Java方法递归的形式和常见递归算法(方法递归结合File类查找文件)
    目录方法递归方法递归的形式递归常见的算法非规律递归案例方法递归 方法递归的形式 什么是方法递归 方法直接调用自己或者间接调用自己的形式称为方法递归( recursion)。 递归做为...
    99+
    2023-02-28
    Java方法递归 java递归算法 java File类查找文件
  • java基于递归算法实现汉诺塔问题实例
    本文实例讲述了java基于递归算法实现汉诺塔问题。分享给大家供大家参考,具体如下:package test;import java.util.List;import java.util.ArrayList;import java.util....
    99+
    2023-05-31
    java 递归算法 汉诺塔
  • Java方法递归的形式和常见递归算法代码分析
    本篇内容介绍了“Java方法递归的形式和常见递归算法代码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法递归方法递归的形式什么是方法递...
    99+
    2023-07-05
  • Java的递归算法怎么优化
    优化递归算法可以通过以下方法来实现:1. 尾递归优化:尾递归是指递归函数在调用自身之后没有其他的操作,直接返回递归函数的结果。尾递归...
    99+
    2023-08-15
    Java
  • Java递归算法与优化后的算法有什么区别
    本篇内容介绍了“Java递归算法与优化后的算法有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、...
    99+
    2024-04-02
  • java程序封装的方法是什么
    在Java中,封装是一种将数据和相关操作封装在一起的面向对象编程的概念。封装可以通过使用访问修饰符(如private、public、...
    99+
    2023-09-23
    java
  • Python函数的递归方法是什么
    本篇内容介绍了“Python函数的递归方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!函数调用自身的 编程技巧 称为递归。1.1、递...
    99+
    2023-06-22
  • python递归优化的方法是什么
    在Python中,递归函数的优化方法主要有以下几种:1、尾递归优化尾递归是指递归函数在递归调用时,最后一个操作是函数调用本身,可以通...
    99+
    2023-05-13
    python递归优化 python
  • oracle递归优化的方法是什么
    Oracle递归查询优化的方法主要有以下几个:1、使用WITH子句使用WITH子句可以将递归查询转换为非递归查询,提高查询效率。WI...
    99+
    2023-05-13
    oracle递归优化 oracle
  • php递归优化的方法是什么
    PHP递归优化的方法主要有以下几个:1. 尾递归优化:将递归函数转化为尾递归函数,可以减少函数调用栈的深度,提高函数的执行效率。尾递...
    99+
    2023-05-13
    php递归优化 php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作