JAVA 递归

 

概述

以编程的角度来看,递归指的是方法定义中调用方法本身的现象

 

递归解决问题的思路

 

把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解

递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算

 

递归解决问题要找到两个内容

 

递归出口:否则会出现内存溢出

递归规则:与原问题相似的规模较小的问题

 

复制代码
 1 public class DiGuiDemo {
 2     public static void main(String[] args) {
 3         //回顾不死神兔问题:求第20个月兔子的对数
 4         //每个月的兔子对数:1,1,2,3,5,8...
 5         int[] arr = new int[20];
 6 
 7         arr[0] = 1;
 8         arr[1] = 1;
 9 
10         for (int i = 2; i < arr.length; i++) {
11             arr[i] = arr[i - 1] + arr[i - 2];
12 
13         }
14         System.out.println(arr[19]);
15         System.out.println(f(20));
16     }
17 
18     /*
19     递归解决问题,首先要定义一个方法
20         定义一个方法f(n);表示第n个月的兔子对数
21         那么,第n-1个月的兔子对数f(n-1)
22         同理,第n-2个月的兔子f(n-2)
23         
24     //StackOverflowError:当堆栈溢出发生时抛出一个应用程序递归太深
25         
26         */
27     public static int f(int n) {
28         if (n == 1 || n == 2) {
29             return 1;
30         }
31         return f(n - 1) + f(n - 2);
32     }
33 
34 }
复制代码

 

复制代码
 1 /*
 2 案例:递归求阶乘
 3 需求:用递归求5的阶乘,并把结果在控制台输出
 4 */
 5 public class DiGuiDemo2 {
 6     public static void main(String[] args) {
 7         System.out.println("5的阶乘是:" + f(5));
 8     }
 9 
10     //定义一个方法,用于递归求阶乘
11     public static int f(int n) {
12         if (n == 1) {
13             return 1;
14         }
15 
16         return n * f(n - 1);
17     }
18 }
复制代码

 

  内存:

  

 

 

遍历目录

 

复制代码
 1 import java.io.File;
 2 
 3 /*
 4 案例:遍历目录
 5 需求:给定一个路径E:\\itcast,请通过递归完成遍历该目录下的所有内容,
 6 并把所有文件的绝对路径输出在控制台
 7 */
 8 
 9 public class DiGuiDemo3 {
10     public static void main(String[] args) {
11         //根据给定的路径创建对象
12         File f = new File("E:\\itcast");
13 
14         get(f);
15     }
16 
17     //定义一个方法。
18     public static void get(File f) {
19         //获取给定目录下所有内容
20         File[] fileArray = f.listFiles();
21         //遍历该file数组,得到每一个file对象
22         if (null != fileArray) {
23             for (File file : fileArray) {
24                 //判断该file是否是目录
25                 if (file.isDirectory()) {
26                     //是,递归调用
27                     get(file);
28                 } else {
29                     //不是,获取绝对路径,输出
30                     System.out.println(file.getAbsolutePath());
31                 }
32             }
33         }
34 
35     }
36 
37 }
复制代码

 

posted @   忱康  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示