java中的递归思想及应用

递归就是自己调自己,最需要注意的就是结束条件,否则可能就是死循环,导致内存溢出

public T a(Object x,Object y)

{  

if(条件true)

{

  a(x1,y1);

}

else

{

  return f(x,y);

}

}

例如:

1.求阶乘

5!=5x4x3x2x1

分析:递归是一层一层推进,第一层是 5*4,第二层4*3,第三层,3*2,递归入参分别是5,4,3,2,1,当为1时返回1,递归终止

public int f(n)

{

if(n=1)

{

  return 1;

}

else

{

  return n*f(n-1);

}

}

2.获取某一父节点下的所有子节点,多层级

分析:第一层入参是父节点本身,第二层入参是父节点下的第一层子节点,第三层是第一层所有节点下的子节点,当节点是叶子节点(没有节点的父节点是它)时,不用继续向下。

只要不是叶子节点,父节点找到的节点都是其子集setchild();

child

{

  menuA

child

    {

      menuA1

child{}

    }

  menuB

child{}

.....

}

//菜单类

public class Menu

{

private int pid;

private int menuId;

private int menuName;

List<Menu> childs; 

.....

}

//获取所有菜单对象

List<Menu> menus = menuDao.getAllMenus();

//查询菜单树方法

public  List<Menu>  getMenuTreeByPid(List<Menu>menus,int pid)

{

List<Menu> child =  new ArrayList<Menu>();

  for(Menu menu: menus)

  {

    if(menu.getPid== pid ) // 入口,说明当前pid下存在子节点

    {

     menu.setChild(getMenuTreeByPid(menus,menu.getMenuId));

     child.add(menu);

    }

  }

 return child;

}

原文地址:https://www.cnblogs.com/dawn2016/p/10230654.html

时间: 2024-07-31 20:36:13

java中的递归思想及应用的相关文章

转(Java中的递归思想)

解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合. 递归的三个条件: 边界条件 递归前进段 递归返回段 当边界条件不满足时,递归前进:当

Java中的递归思想

转自:https://www.cnblogs.com/xiaosen992608/p/4037682.html 递归: 递归的概念:方法自身调用自身则称为递归. 递归的分类: 间接递归:方法A调用方法B,方法B调用方法C,方法C调用方法A. 直接递归: 方法A调用方法A.(常用) 递归的注意事项: 递归一定要出口:结束递归的条件. 递归次数不要太多. 如果递归不结束,则会报错. java.lang.StackOverflowError: 栈内存溢出错误 递归会内存溢出隐患的原因: 方法不停地进栈

2018.3.31 java中的递归

java中的递归 1.概念 定义一个方法时,出现本方法调用本方法的过程,称之为递归 2.特点 必然有一个边界条件 使用递归代码往往更简洁,可读性强 3.什么时候使用递归 n的阶乘和n的累加定义 f(n) =1 f(n)=f(n)*f(n-1) 4.普通实现与递归实现的比较 普通实现 //计算5的阶乘 public class Demo { public static void main(String[] args) { int sum = 1; for (int i =5; i >=1; i--

Java中的递归调用

Java中不合理的使用递归调用,可能会导致栈内存溢出,这点是需要注意的. java将为每个线程维护一个栈,栈里将为每个方法保存一个栈帧,栈帧代表了一个方法的运行状态. 也就是我们常说的方法栈.最后一个为当前运行的栈帧. 那么每一次方法调用会为新调用方法的生成一个栈帧,保存当前方法的栈帧状态,栈帧上下文切换,切换到最新的方法栈帧. 在递归和循环之间选择时,应该优先选择的是循环而非递归,特别是要避免深度的递归. 关于递归还需要了解的是尾递归调用,尾递归调用是可以被进行优化的. 尾调用指的是一个方法或

初识java数组与递归思想

数组 数组的初始化: 1.静态初始化: 值由我们来给定,长度通过系统来计算. 格式举例: int[] arr=new int[]{这里是我们给定的值} 静态初始化的简写格式: int[] arr={这里是我们给定的值}:这种方式用法的比较多. 2.动态初始化: 长度有我们来给定,值有系统初始化默认值.各个类型对应的默认值不一样,我们 下面会介绍. 格式举例: int[] arr=int[我们指定的长度]; 注意: 数组类型的变量有两种定义方式: 1.int[] a: 2.int a[]: 推荐使

Java中的核心技术思想

Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.对核心概念和思想的掌握可以帮助我们举一反三.触类旁通,有助于提升我们对整个Java平台的理解力.这里所介绍的是Java技术平台的几个核心概念,其中所蕴含的思想有助于我们更深刻的理解Java技术.Java虚拟机Java虚拟机的主要任务是装在class文件并且执行其中的字节码.Java虚拟机包含一个类装载器,它可以从程序和API中装载class文件.Java API中只有程序执

Java中的递归原理分析

解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合. 递归的三个条件: 边界条件 递归前进段 递归返回段 当边界条件不满足时,递归前进:当

面试中常见的算法之Java中的递归

1.方法定义中调用方法本身的现象2.递归注意实现 1) 要有出口,否则就是死递归 2) 次数不能太多,否则就内存溢出 3) 构造方法不能递归使用3.递归解决问题的思想和图解: 分解和合并[先分解后合并] 1. 常见的斐波那契数列 1,1,2,3,5,8,13,21,...特征: 从第三个数开始,每个数是前两个数的和. int count = 0; private int getFibo(int i) { if (i == 1 || i == 2) { count = count+1; Syste

java中的递归

递归算法的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或间接的调用自己. 递归需要满足两点: 1)定义递归头:说白了就是条件,在什么时候不去调用了,如果没有条件,则会陷入死循环. 2)要有递归体:就是什么时候调用自己. 例子:100的阶乘 /** * 计算20的阶乘 */ public class Recursion { static long factorial(int n){ if(n==1) { //递归头 return 1; } else { //递归体 ret