方法的递归
递归一般指方法自己调用自己
递归结构包括两个部分:
递归头: 判断递归什么时候结束,如果没有程序将陷入死循环
递归体: 用来判断什么时候调用自身方法
用递归写一个小程序判断数字的阶乘:
//阶乘:符号为!
// 1! 1的阶乘 | 2! 2的阶乘 | 3! 3的阶乘
//1! =1
//2! =1*2 2
//3! =1*2*3 6
//4! =1*2*3*4 24
//5! =1*2*3*4*5 120
public int test(int a){
if (a==1){
return 1; //当a=1时方法不再调用 停止调用自身;
}else{
return a * test(a-1); //如果a不等于1时 调用自身方法并参数为a-1
}
}
//调用方法
System.out.println(test(5))
输出结果为:120
//解析
//方法执行传入参数为 a=5
//方法执行到 a * test(a-1) 此时a=5 return未执行 优先调用test方法 此时方法在 5*test(5-1) test方法在执行
//方法进入第一次递归,此时a为4 return未执行 优先调用test方法 此时方法在 4*test(4-1) test方法在执行
//方法进入第二次递归,此时a为3 return未执行 优先调用test方法 此时方法在 3*test(3-1) test方法在执行
//方法进入第三次递归,此时a为2 return未执行 优先调用test方法 此时方法在 2*test(2-1) test方法在执行
//方法进入第四次递归,a=1 程序进入if条件 不再调用自身,递归停止, return 1
//第一次return 返回1 连接上面 return 2*(1)
//第二次return 返回2 连接上面 return 3*(2*1)
//第二次return 返回3 连接上面 return 4*(3*2*1)
//第二次return 返回4 连接上面 return 5*(4*3*2*1)
// **概括起来: 5*test(4*test(3*test(2*test(2-1)))) 可以理解为括号里的先运算**
在递归方法中方法 先执行 后返回
- 递归方法在没有递归头的情况下,会发生栈内存溢出错误:stackOverflowError ;
- 在java方法的执行中 每调用一次main方法就等于在叠罗汉 而我们虚拟机的实际容量是有限的 当堆栈高度超出时就会报错;
- 有时在有递归头的情况下 方法递归的太深 程序也会报错;
- 在实际开发中一般不建议使用递归方法 一般用for循环或者while循环来代替
标签:调用,return,递归,test,执行,方法 来源: https://blog.csdn.net/java_mao9/article/details/113852190
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。