025_递归算法详解
【需求说明】:用递归算法实现5的阶乘
【需求分析】: 5!=5*4*3*2*1
一、递归了解
递归的基本思想就是:自己调用自己、一个使用递归技术的方法将会直接或者间接的调用自己。
递归结构包括两个部分:
a)递归头:什么时候不调用自身方法。如果没有递归头,将陷入死循环导致栈深度超过虚拟机分配给线程的栈大小时抛出栈溢出异常(StackOverflowError)。
栈溢出异常(StackOverflowError):当栈深度超过虚拟机分配给线程的栈大小时就会出现此error
b)递归体:什么时候需要调用自身方法。
二、需求实现
需求测试代码:
1 package edu.test; 2 3 /** 4 * @author lzj 5 * @create 2017年10月25日 上午2:45:14 6 * @describe 简单测试用递归算法实现阶乘 7 */ 8 public class TestRecursion{ 9 /** 10 * 11 * at 2017年10月25日 上午2:50:10 by lzj 12 * @Parameters1 13 * @Returns int 14 * @describe 用递归算法实现任意数的阶乘算法 15 */ 16 public static int Factorail(int i) { 17 if(i==1) { 18 return 1; 19 } 20 return i*Factorail(i-1); //阶乘 21 } 22 23 /** 24 * at 2017年10月25日 上午2:45:14 by lzj 25 * @Parameters1 String[] args 26 * @Returns void 27 */ 28 public static void main(String[] args) { 29 //测试任意数的阶乘、这里可以从控制台输入、这里不过多去实现 30 int a=TestRecursion.Factorail(5); 31 System.out.println(a); 32 } 33 }
改进代码:
1 //改进代码如下,前面代码容易理解,理解完之后对代码改进就OK了! 2 public static int Factorail(int i) { 3 return i==1 ? 1:i*Factorail(i-1); //阶乘 4 }
测试结果:
120
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步