递归的执行机制

简介: 递归的执行机制

递归

递归就是方法自己调用自己

规则

 1.执行一个方法的时候,就创建一个新的受保护的独立空间(栈空间)
 2.方法的局部变量是独立的,不会互相影响
 3.如果方法中使用的是引用数据类型变量,就会共享该引用类型的数据
 4.递归必须要有结束条件,不然会出现栈溢出
 5.递归占用很大的内存
 6.当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就把结果返回给谁,同时当方法执行完毕或者返回的时候,这个方法也就执行完毕了
 

递归调用的执行机制

public class Recursion01 {

//编写一个 main 方法
public static void main(String[] args) {

T t1 = new T();
t1.test(4);//输出什么?  n=2 n=3 n=4
 
}
}

class T {
//分析
public   void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
 
 



}

以上面那一个作为例子:
首先进入main方法,然后在栈内存开辟空间,接着执行main方法里面的代码片段,当main方法调用test()方法的时候,会在栈中另外开辟一个新的空间,然后把实参4传进去

由于,if(n>2)判断条件为true,所以会执行test(n-1)方法,在栈中另外开辟新的空间,直到n=2的时候,判断条件不成立,这个时候控制台输出2,然后n=2的这个方法结束了,这个栈空间就会释放掉,再回到 n = 3 这个空间的text(n -1);继续执行后面的语句,直到程序结束。
在这里插入图片描述

相关文章
|
6月前
递归执行的时候使用一次性还是永久性定时器?
递归执行的时候使用一次性还是永久性定时器?
|
前端开发 vr&ar
【前端验证】fork-join_none线程立即执行的一次代码优化记录
【前端验证】fork-join_none线程立即执行的一次代码优化记录
|
Java
递归锁解析
递归锁(Reentrant Lock)是一种可以被同一个线程多次获取的锁,它避免了死锁的发生。在Java中,ReentrantLock类实现了递归锁的机制。
411 1
|
算法
【递归可以干什么】1#重复执行某种模式
【递归可以干什么】1#重复执行某种模式
82 0
|
机器学习/深度学习 Java 大数据
函数递归调用的机制|学习笔记
快速学习函数递归调用的机制。
123 0
函数递归调用的机制|学习笔记
【小白学算法】10.递归的调用机制、使用时要注意的规则
【小白学算法】10.递归的调用机制、使用时要注意的规则
【小白学算法】10.递归的调用机制、使用时要注意的规则
|
缓存 Java 测试技术
让线程按顺序执行8种方法
  本文使用了7中方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。 使用的方法如下:
143 0
每天一个知识点(三)如何让多个线程按顺序执行?
每天一个知识点(三)如何让多个线程按顺序执行?
|
Java 编译器
面试官:三个线程顺序执行,你来说说有几种实现方式?
能想起来几种呢? 先说下要求,就是三个线程,假设是线程 1,2,3, 现在的要求是:必须是线程 1 先执行,然后线程 2 再执行,最后是线程 3 执行 然后有几种实现方法呢? 其实它的本质就是实现,让线程 2,3 等待线程 1 执行完毕,所以重点就是有哪些方法可以让线程 2,3 等待
|
程序员 Shell
如何重复执行一条命令直至运行成功?
大家好,我是良许。 在我们的日常工作中,需要我们重复做的工作简直不能太多。比如,我们想要确认网络是否是连通的,传统的做法就是使用 ping 命令不停去测试某个地址(比如百度)。网络比较好还好说,但如果网络很差,那么就需要一直去运行 ping 命令。 作为程序员,重复性的工作怎么能忍呢?只要是重复性的工作,就有可能使用编程的方式来解决! 下面良许就介绍两种方法重复执行一条命令直至运行成功。 (PS:本文适合初学者,高手可绕道) 解决重复性的工作,自然而然会想到循环 。在 Shell 里,循环无非 3 种:for、while、until 。在本文里,我们使用后两种循环:while 、un
190 0