学习笔记--Java中方法递归调用
Java中方法递归调用
public class RecursionTest01{ public static void main(String[] args){ System.out.println("main begin"); // 调用doSome方法 doSome(); System.out.println("main over"); } public static void doSome(){ System.out.println("main begin"); doSome(); // 调用方法自身 System.out.println("main over"); } }
- 在上面的代码中
doSome
的代码片段只有一份public static void doSome(){ System.out.println("main begin"); doSome(); // 这块代码不结束,下一行代码不执行 System.out.println("main over"); } - 只要调用
doSome
方法就会在栈内存中新分配一块所属内存空间 - 上述程序会产生一个错误【不是异常,是错误
Error
】- java.lang.StackOverflowError
- 栈内存溢出错误
- 错误发生无法挽回,只有一个结果,就是 JVM 停止工作
方法递归的使用
-
什么是递归?
方法自身调用自身
a(){ a(); } -
递归是很耗费栈内存的,递归算法能不用就尽量不用
-
递归必须有结束条件,不然必定会发生栈内存溢出错误
-
递归即使有结束条件,但也可能发生栈内存溢出错误,因为递归的太深了
public class RexursionTest{ public static void main(String[] args){ int num = 4; System.out.println("sum: " + sum(num)); System.out.println("rexursionSum: " + rexursionSum(num)); } // 求 1~N 的和 public static int sum(int num){ int result = 0; for(int i = 1; i <= num; i++){ result += i; } return result; } // 使用递归,求 1~N 的和 public static int rexursionSum(int num){ if (num == 1){ return 1; } return num + rexursionSum(num - 1); } }
结果:
sum: 10 rexursionSum: 10
感受递归:
public class RexursionTest{ public static void main(String[] args){ int num = 4; System.out.println("------------\nsum: " + sum(num)); } // 使用递归,求 1~N 的和 public static int sum(int num){ System.out.println("sum " + num + " 执行开始"); int result; System.out.println("num: " + num); if (num == 1){ System.out.println("sum " + num + " 执行结束"); return 1; } result = sum(num - 1); System.out.println("result: " + result); result += num; System.out.println("result += num: " + result); System.out.println("sum " + num + " 执行结束"); return result; } }
结果:
sum 4 执行开始 num: 4 sum 3 执行开始 num: 3 sum 2 执行开始 num: 2 sum 1 执行开始 num: 1 sum 1 执行结束 result: 1 result += num: 3 sum 2 执行结束 result: 3 result += num: 6 sum 3 执行结束 result: 6 result += num: 10 sum 4 执行结束 ------------ sum: 10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了