您现在的位置是:首页 > Java 当前栏目 java--递归 JAVA 变量 递归 2023-03-02 11:12:37 时间 # 递归 # 有可能你会疑惑什么是递归呢?递归就是调用其本身,说白了就是在方法定义中调用方法自身。不过在学习递归之前,先了解一下堆和栈把。 ### 堆与栈 ### <table> <tbody> <tr> <th>栈</th> <th>堆</th> </tr> <tr> <td>用来存放局部变量的<p>局部变量:在方法定义中和声明上的变量</p></td> <td>存放的是new出来东西</td> </tr> <tr> <td></td> <td>特点</td> </tr> <tr> <td>每一个new出来的东西,都会对其分配一个空间,如果是一个变量的话,会为其赋上默认值,最后使用完毕后会等待垃圾回收器,将其回收</td> </tr> </tbody> </table> <table> <tbody> <tr> <th>数据类型</th> <th>默认值</th> </tr> <tr> <td>byte、short、int、long</td> <td>0</td> </tr> <tr> <td>floa、double</td> <td>0.0</td> </tr> <tr> <td>char</td> <td>\u0000</td> </tr> <tr> <td>boolean</td> <td>false</td> </tr> <tr> <td>引用数据类型</td> <td>null</td> </tr> </tbody> </table> ### 演示 ### 1、计算阶层(如:5!) import java.util.Scanner; public class Recursion { public static void main(String[] args) { Scanner x = new Scanner(System.in); System.out.println("请输入要计算的阶层数:"); int y=x.nextInt(); System.out.println("结果是:"+rescursion(y)); } public static int rescursion(int a){ if(a==1){ return 1; }else{ return a*rescursion(a-1); } } } 结果 请输入要计算的阶层数: 5 结果是:120 注:阶层计算是乘上这个数每次减1的数,直到乘1为止(如:5!=5x4x3x2x1=120),这里就用到了这个思想,我先写一个有返回值方法,传入一个要计算的阶层值,不想要多写循环让这个值减1算出结果,那我就调用自身的方法,然后在传入的参数中减1,直到这个参数减到1时,这个调用就返回1,然后逐个与前面的数相乘,算出最后结果。 ### 示意图 ### ![在这里插入图片描述][70] 先把Java文件编译为字节码文件(后缀名为class的文件),有JVM加载main方法进栈,在main方法中进行了一系列步骤后,调用了rescursion方法,然后rescursion方法就被加载进栈,进栈后,在这个方法里又调用了rescursion方法,在调用时,传递的参数依次减1,直到参数为1时,停止调用并返回1,然后这个1返回给下一层调用rescursion方法里的return后面的rescursion方法,返回完后逐个弹栈,最后返回给main方法中的方法调用,然后main方法也弹栈。 注:从图中也可以看出,如果递归次数一多起来,就会不停的在栈中累积,这样会给栈造成负担,导致栈溢出,因此,递归不适合用在递归次数太多的情况,这时候建议使用循环。 [70]: /images/20220505/1bf23c25ce2f409dae4b8ce773ab1c68.png 本文地址: java--递归 相关文章 插入排序--Java Java插入排序 Java调用webservice Java 基础一 Java基础(一) Java基础一 java下载文件 java编写日历 随感吧(java) java命令大全 Java访问修饰符 Java代码生成器 java,接口实例 【教程】Java 方法 java ParameterizedType使用 java动态代理 java计算开方 Java Servlet HelloWorld 【java】全排列 JAVA全排列!!!