秦疆的JavaSE课程笔记:50 方法 递归讲解
1.秦疆的JavaSE课程笔记:01-04 前言2.秦疆的JavaSE课程笔记:05-08 预科 上3.秦疆的JavaSE课程笔记:09-12 预科 下4.秦疆的JavaSE课程笔记:13-16 入门 上5.秦疆的JavaSE课程笔记:17-20 入门 下6.秦疆的JavaSE课程笔记:21 基础 注释7.秦疆的JavaSE课程笔记:22 基础 标识符和关键字8.秦疆的JavaSE课程笔记:23 基础 数据类型9.秦疆的JavaSE课程笔记:24 基础 数据类型扩展及面试题讲解10.秦疆的JavaSE课程笔记:25 基础 类型转换11.秦疆的JavaSE课程笔记:26 基础 变量 常量 作用域12.秦疆的JavaSE课程笔记:27 基础 基本运算符13.秦疆的JavaSE课程笔记:28 基础 自增自减运算符 初识Math类14.秦疆的JavaSE课程笔记:29 基础 逻辑运算符 位运算符15.秦疆的JavaSE课程笔记:30 基础 三元运算符及小结16.秦疆的JavaSE课程笔记:31 基础 包机制17.秦疆的JavaSE课程笔记:32 基础 JavaDoc生成文档18.秦疆的JavaSE课程笔记:33 流程控制 Scanner19.秦疆的JavaSE课程笔记:34 流程控制 Scanner进阶使用20.秦疆的JavaSE课程笔记:35 流程控制 顺序结构21.秦疆的JavaSE课程笔记:36 流程控制 if选择结构22.秦疆的JavaSE课程笔记:37 流程控制 switch选择结构23.秦疆的JavaSE课程笔记:38 流程控制 while循环详解24.秦疆的JavaSE课程笔记:39 流程控制 do...while循环25.秦疆的JavaSE课程笔记:40 流程控制 For循环详解26.秦疆的JavaSE课程笔记:41 流程控制 打印九九乘法表27.秦疆的JavaSE课程笔记:42 流程控制 增强For循环28.秦疆的JavaSE课程笔记:43 流程控制 break、continue、goto29.秦疆的JavaSE课程笔记:44 流程控制 打印三角形及Debug30.秦疆的JavaSE课程笔记:45 方法 什么是方法31.秦疆的JavaSE课程笔记:46 方法 方法的定义和调用32.秦疆的JavaSE课程笔记:47 方法 方法的重载33.秦疆的JavaSE课程笔记:48 方法 命令行传递参数34.秦疆的JavaSE课程笔记:49 方法 可变参数
35.秦疆的JavaSE课程笔记:50 方法 递归讲解
36.秦疆的JavaSE课程作业:50 方法 编写简易Scanner计算器37.秦疆的JavaSE课程笔记:51-52 数组 什么是数组&数组的声明和创建38.秦疆的JavaSE课程笔记:53 数组 三种初始化及内存分析39.秦疆的JavaSE课程笔记:54 数组 下标越界及小结40.秦疆的JavaSE课程笔记:55 数组 数组的使用41.秦疆的JavaSE课程笔记:56 数组 二维数组42.秦疆的JavaSE课程笔记:57 数组 Arrays类讲解43.秦疆的JavaSE课程笔记:58 数组 冒泡排序44.秦疆的JavaSE课程笔记:59 数组 稀疏数组45.秦疆的JavaSE课程笔记:60 面向对象 什么是面向对象46.秦疆的JavaSE课程笔记:61-62 面向对象 回顾方法的定义&回顾方法的调用47.秦疆的JavaSE课程笔记:63 面向对象 类与对象的创建48.秦疆的JavaSE课程笔记:64 面向对象 构造器详解49.秦疆的JavaSE课程笔记:65-66 面向对象 创建对象内存分析&简单小结类与对象50.秦疆的JavaSE课程笔记:67 面向对象 封装详解51.秦疆的JavaSE课程笔记:68 面向对象 什么是继承52.秦疆的JavaSE课程笔记:69 面向对象 Super详解53.秦疆的JavaSE课程笔记:70 面向对象 方法重写54.秦疆的JavaSE课程笔记:71 面向对象 什么是多态55.秦疆的JavaSE课程笔记:72 面向对象 instanceof和类型转换56.秦疆的JavaSE课程笔记:73 面向对象 static关键字详解57.秦疆的JavaSE课程笔记:74 面向对象 抽象类58.秦疆的JavaSE课程笔记:75 面向对象 接口的定义与实现59.秦疆的JavaSE课程笔记:76 面向对象 N种内部类60.秦疆的JavaSE课程笔记:77 异常 Error和Exception61.秦疆的JavaSE课程笔记:78 异常 捕获和抛出异常62.秦疆的JavaSE课程笔记:79 异常 自定义异常及经验小结- 一般情况下,我们用A方法调用B方法。
- 递归就是,A方法调用A方法,自己调用自己。
- 利用递归可以用简单的程序来解决一些复杂的问题。通常把一个大型复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多此重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
public class Demo1 {
public static void main(String[] args) {
Demo1 test = new Demo1();
test.test();
}
public void test() {
test();
}
}
====如果运行的话,会报错====
Exception in thread "main" java.lang.StackOverflowError
//也就是堆栈溢出异常。
-
递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。(比如上面的Demo就是没有递归头)
- 递归体:什么时候需要调用自身方法。
-
下面看一个简单的用递归求阶乘的代码
public class Demo2 {
public static void main(String[] args) {
System.out.println(f(3));
}
public static int f(int n) {
if (n == 1) {
return 1;
} else {
return n*f(n-1);
}
}
}
====输出====
6

- 在嵌套深度较大时,递归可能造成堆栈溢出,得用其他方法代替。
合集:
JavaSE课程笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix