zoukankan      html  css  js  c++  java
  • 递归---Day29

    递归的概述

      递归:指在当前方法内自己调用自己的方式叫做递归

    递归的分类:

      1.直接递归称为方法自身调用自己。

      2.间接递归可以用A方法调用B方法,用B方法调用C方法,用C方法调用A方法。 

    递归的注意事项

      递归一定要有限定条件,保证递归能够停止下来,否则会出现死循环,导致发生栈内存溢出。 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。   构造方法,禁止递归

     1 package demosummary.recursive;
     2 
     3 public class RecursiveDemo1 {
     4     public static void main(String[] args) {
     5         //调用a方法
     6         a(1);
     7         //调用b方法
     8         b();
     9     }
    10 
    11     private static void a(int i) {
    12         System.out.println(i);
    13         //添加一个条件避免发生内存溢出现象
    14         if (i == 10) {
    15             return;
    16         }
    17         a(++i);
    18     }
    19 
    20     //没有限制条件,会发生内存溢出现象
    21     private static void b() {
    22         System.out.println("b方法");
    23         b();
    24     }
    25 }

    递归累加求和

     1 package demosummary.recursive;
     2 
     3 /**
     4  * 计算1~n的和
     5  * 分析:
     6  *    num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用
     7  */
     8 public class RecursiveSum {
     9     public static void main(String[] args) {
    10         int sum = getSum(5);
    11         System.out.println(sum);
    12     }
    13 
    14     private static int getSum(int num) {
    15         if (num == 1) {
    16             return 1;
    17         }
    18         return num+getSum(num -1);
    19     }
    20 }

    递归求阶乘(同求和一样解法)

     1 package demosummary.recursive;
     2 
     3 public class RecursiveFactorial {
     4     public static void main(String[] args) {
     5         int sum = getSum(5);
     6         System.out.println(sum);
     7     }
     8 
     9     private static int getSum(int num) {
    10         //当num=1时,停止递归,防止发生内存溢出现象
    11         if (num == 1) {
    12             return 1;
    13         }
    14         return num * getSum(num - 1);
    15     }
    16 }

    递归打印多级目录

     1 package demosummary.recursive;
     2 
     3 import java.io.File;
     4 
     5 public class RecursivePrintDir {
     6     public static void main(String[] args) {
     7         //创建File对象
     8         File file = new File(".//filter");
     9         //调用打印方法
    10         printDir(file);
    11     }
    12 
    13     private static void printDir(File dir) {
    14         //获取目录的集合
    15         File[] files = dir.listFiles();
    16         //循环打印目录
    17         for (File file : files) {
    18             if (file.isFile()) {//判断是否为文件
    19                 System.out.println("文件的路径:" + file.getAbsolutePath());
    20             } else {//判断是否为目录
    21                 System.out.println("目录的路径:" + file.getAbsolutePath());
    22                 //是目录则继续往下打印
    23                 printDir(file);
    24             }
    25         }
    26     }
    27 }
  • 相关阅读:
    嗅探对方机器,获取机器键盘记录
    python识别图片生成字符模式
    栈 详解
    解决 No result defined for action and result input 异常
    解决hibernate保存数据到mysql中出现乱码问题
    懒加载异常 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
    解决springjava.lang.IllegalStateException: BeanFactory not initialized or already closed
    Android Fragment 详解
    脏读|不可重复度|幻读的理解以及Spring定义的五种事务隔离级别
    Spring中的context:annotation-config作用
  • 原文地址:https://www.cnblogs.com/hpcz190911/p/11986676.html
Copyright © 2011-2022 走看看