java 递归详解

简介: java 递归详解

image.png

刚学java的时候通常难以理解递归程序设计的概念。递归思想之所以困难,原因在于它非常像是循环推理(circular reasoning)。它也不是一个直观的过程;当我们指挥别人做事的时候,我们极少会递归地指挥他们。


对刚开始接触计算机编程的人而言,这里有递归的一个简单定义:当函数直接或者间接调用自己时,则发生了递归。


递归是一种常见的解决问题的方法,寄把问题逐渐简单化。递归的基本思想就是

“自己调用自己”,一个使用递归技术的方法会直接或间接的调用自己

递归构造包括两个部分:

定义递归头。什么时候不调用自身方法,如果没有头,将陷入死循环

递归体。什么时候需要调用自身方法


其实递归算法很简单,简单点就是自己调用自己的方法,有条件判断什么时候停止!



递归的经典示例


计算阶乘是递归程序设计的一个经典示例。计算某个数的阶乘就是用那个数去乘包括 1 在内的所有比它小的数。例如,factorial(5) 等价于5*4*3*2*1,而 factorial(3) 等价于 3*2*1。


阶乘的一个有趣特性是,某个数的阶乘等于起始数(starting number)乘以比它小一的数的阶乘。例如,factorial(5) 与 5 * factorial(4) 相同。您很可能会像这样编写阶乘函数:

package cn.itcast.heima2;
/**
 * 测试方法
 * @author lyy
 */
public class TraditionalThread {
  public static long factorial(int n){
    if(n == 1){//递归头
      return 1;
    }else{//递归体
      return n*factorial(n-1);
    }
  }
    public static void main(String[] args) {
      long num = factorial(10);
      System.out.println(num);
    }
} 

示例二:


package cn.itcast.heima2;
/**
 * 测试方法
 * @author lyy
 */
public class TraditionalThread {
  private static int a = 0;
  public static void test01(){
  a++;
  System.out.println("test——"+a);
  if(a <= 10){//递归体
    test01();
  }else{//递归头
    System.out.println("over!");
  }
  }
  public static void test02(){
  System.out.println("test02");
  }
  public static void main(String[] args) {
  test01();
  }
}




好了基本上递归算法就是以上的两个方法,不喜勿喷!


目录
相关文章
|
3月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
34 1
java基础(11)函数重载以及函数递归求和
|
7月前
|
Java
java中递归实例
java中递归实例
52 0
|
5月前
|
算法 Java
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
90 7
|
6月前
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
34 4
|
6月前
|
Java
java实现斐波那契数列(递归、迭代、流)
java实现斐波那契数列(递归、迭代、流)
|
6月前
|
算法 前端开发 Java
探讨Java中递归构建树形结构的算法
探讨Java中递归构建树形结构的算法
94 1
|
6月前
|
Java
Java递归:深入理解与应用
Java递归:深入理解与应用
81 1
|
6月前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
45 0
|
7月前
|
Java
<Java SE> 5道递归计算,创建数组,数组遍历,JVM内存分配...
<Java SE> 5道递归计算,创建数组,数组遍历,JVM内存分配
68 2
|
6月前
|
Java 大数据 程序员
老程序员分享:java递归
老程序员分享:java递归
30 0