美文网首页
Java_递归

Java_递归

作者: 山巅自相见 | 来源:发表于2021-07-23 14:17 被阅读0次

概述

  • 递归:指在当前方法内调用自己的这种现象
  • 递归的分类
    • 递归分为两种,直接递归和间接递归
    • 直接递归称为方法自身调用自己
    • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
  • 注意事项
    • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
    • 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
    • 构造方法,禁止递归
public class Demo01Recursion {
    public static void main(String[] args) {
        a();
    }

    /*递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
    * Exception in thread "main" java.lang.StackOverflowError*/
    private static void a() {
        System.out.println("a方法");
        a();
    }
}
递归_栈内存溢出原理.png
/*在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
* Exception in thread "main" java.lang.StackOverflowError*/
private static void b(int i) {
  System.out.println(i);
  if (i == 20000) {
    return;
  }
  b(++i);
}

/*构造方法,禁止递归
* 编译报错:构造方法是创建对象使用的,一直递归会导致内存中有无数多个对象,直接编译报错*/
public Demo01Recursion() {
  // Demo01Recursion();
}

递归累加求和

计算1~n的和

分析:num的累和 = num + (num - 1)的累和,所以可以把累和的操作定义成一个方法,递归调用。
代码实现:

// 使用递归计算1-n之间的和
public class Demo02Calculation {
  public static void main(String[] args) {
    System.out.println(calculation(10));
  }

  /*定义一个方法,使用递归计算1-n之间的和
  * 1+2+3+...+n 反过来也就是 n+(n-1)+(n_2)+...+1
  * 已知:
  *   最大值n
  *   最小值1
  * 使用递归必须明确:
  *   1、递归的结束条件:获取到1的时候
  *   2、递归的目的:获取下一个被加的数字(n-1)*/
  private static int calculation(int n) {
    // 获取到1的时候
    if (n == 1) {
      return 1;
    }
    // 获取下一个被加的数字
    return n + calculation(n - 1);
  }
}

递归计算阶乘

/**
  * 使用递归计算阶乘
  */
private static int factorial(int i) {
  if (i == 1) {
    return 1;
  } else if (i < 0) {
    return 0;
  }
  return i * factorial(i - 1);
}

相关文章

  • Java_递归

    概述 递归:指在当前方法内调用自己的这种现象 递归的分类: 递归分为两种,直接递归和间接递归 直接递归称为方法自身...

  • Java书籍资料整理

    http://en.wikipedia.org/wiki/Template:Java_%28software_pl...

  • 2020-02-06 java_递归_动态规划

    leetcode——091 ( 作者:reedfan 链接:https://leetcode-cn.com/pro...

  • Java_实例_递归实现二分查找法

    在调用二分查找法之前必须先将数组排序;

  • 雪花算法

    雪花算法的原理和实现Java_雨夜青草的博客-CSDN博客_雪花算法 64 = 1 41 10 12

  • alibaba-nacos-config 阿里的nacos

    参见:SpringBoot使用Nacos作为配置中心服务和服务注册中心_java_牧竹子-CSDN博客 手册参见:...

  • java_多线程

    java_多线程 线程创建方式;join用法; sleep和wait区别; 线程安全和不安全的java集合; St...

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

  • Java 调用jni方法

    两种实现方式 Java_包名类名方法名 RegisterNatives方法 native 方法如下 第一种方式:在...

  • 二叉树的遍历

    先序递归: 非递归: 中序递归: 非递归: 后序递归: 非递归 层次遍历

网友评论

      本文标题:Java_递归

      本文链接:https://www.haomeiwen.com/subject/aabumltx.html