Java入门:06.Java中的方法--进阶04

4方法递归

简而言之就是方法的自身调用。 也可以是方法组自身的调用

  • 递归类似循环,可以实现功能的反复执行。在某些(算法)环境下,比使用循环更轻松。

  • 递归的本质就是方法的不同调用,就会不同的产生栈帧压栈,栈空间有限,一个逻辑性不合理的递归会导致栈内存溢出(满了),所以递归时我们一般都会有一个结束条件。

java 复制代码
 public static void t1(){
     t1();
 }
 ​
 public static void t2(){
     t3();
 }
 public static void t3(){
     t2();
 }

递归公式:要想做a这件事,需要先做b那件事。a和b是一样的事

  • 当我们分析程序的时候,如果分析出递归公式,就可以考虑使用递归实现功能

  • 如果我们看到了一个使用递归实现的功能,应该可以分析出其对应的递归公式

  • 下面是一个使用递归完成1-100累加和的小案例:

java 复制代码
class A{
	public static void main(String[] args){
		int sum=doSum(100);
		System.out.println(sum);
	}
    //这个方法的作用是算累加和
	public static int doSum(int max){
        //按照递归公式,1-100的累加和,我不会算
        //我只能把当前值和其他数字的累加和算到一起
        //那么其他数字的累加和谁来算呢?
        //当前方法能算,我们就用当前数值100加上再次利用调用当前方法得来的99的累加和作为返回值,得                                         
          到1-100的累加和
        //第二次调用该方法时,所计算的就是99的累加和了,那么该方法也不会算
        //我只能用99加上1-98的累加和了。
        //我们就要用98作为最大值,来得到1-98的累加和
        //以此类推,当最大值为1时,我们就肯定知道,它的累加和了,就把它还给上一次调用它的方法,
        此时2+(1的累加和)就会作为2的累加和被返还到上一次的  3加上2的累加和 以此得到3的累加和传给4+(3的累加和)...
        //以此类推,这样从最底层开始,层层的累加和我们就都能够得到了
        //最后99的累加和也会被返还回来
        //我们就用100+(1-99的累加和)得到1-100的累加和,返回给主方法的调用处
		if(max==1){
			return 1;
		}
		return max+doSum(max-1);
	}
}

递归与循环的对比

  • 循环一定是一次执行完了, 再执行下一次。

  • 递归是一次执行到一半,就执行下一次。等下一次执行完, 这一次还要继续执行。

  • 递归不适合捋代码流程。只适合与递归公式碰撞。

相关推荐
码客日记12 小时前
Spring Boot 全局跨域配置与前后端联调避坑
java·spring boot·后端
兰令水13 小时前
leecodecode【回溯子集】【2026.6.4打卡-java版本】
java·开发语言·深度优先
fox_lht13 小时前
14.3.重构
开发语言·后端·rust
牛油果子哥q13 小时前
【C++ const 】全场景深度精讲:修饰规则、底层常量折叠、指针 / 引用 / 成员函数实战、易错坑点与工程代码实现
开发语言·c++
闪电悠米13 小时前
黑马点评-Redisson-02_reentrant_lock
java·spring boot·redis·分布式·缓存
云烟成雨TD13 小时前
Spring AI Alibaba 1.x 系列【67】ReactAgent SSE 流式输出
java·人工智能·spring
天天进步201513 小时前
Python全栈项目--社区问答平台
开发语言·python·django
我登哥MVP13 小时前
Spring Boo从“会用”到“精通”:Spring Boot 入门
java·spring boot·后端·spring·maven·intellij-idea·mybatis
skywalk816313 小时前
Tree-sitter是一个解析器生成器工具和一个增量解析库。它可以为源文件构建具体的语法树,并在编辑源文件时有效地更新语法树
开发语言·编程
染翰13 小时前
Java 实现 Git 自动克隆工具,打包成 Windows 独立 EXE(免安装JDK)
java·git·后端