用一行代码实现java递归算法的阶乘10!

一行代码实现java递归算法的阶乘

用递归算法求10!

10! 就是求10的?阶乘的表达式,如何用递归算法来计算呢?
10x9x8x7x6x5x4x3x2x1=?
所谓递归算法,就是自己调用自己的算法;但是自己调用自己始终得有一个递归的出口,不然递归就成为了死循环;
那么,我们这里的的递归条件设置为从10递减到1就停止;所以方法里面有一个判断,如果传递进来的参数n==1,那么就直接return n即可;因为n的值是在判断条件不成立的情况下,会进入else方法体里面的递归调用;那么我们来看一下用三目运算实现的这个递归算法代码;


public class Example {
   
	/**
	 * main方法:程序入口
	 * @param args
	 */
	public static void main(String[] args) {
   
		System.out.println(fun(10));
	}
	
	/**
	 * 10!的递归方法
	 * @param n
	 * @return
	 */
	public static int fun(int n) {
   
		return n == 1 ? 1 : n * fun(n - 1);
	}
}

分析:
我们在main方法里面直接输出fun方法返回的int值;当在fun方法传入参数10的时候,n=1的表达式不满足,则返回第二个表达式的值,我们来分析一下这个表达式n*fun(n-1),这个表达式里面调用了fun方法,但是我们知道当前执行代码的方法就是在fun方法内部,也就是在一个方法内部调用了自己,即在fun方法内部又调用了自己;和程序首次执行不同的是,程序第一次执行传入的值是默认的int值10,但是第二次在方法内部递归调用的时候,fun(n-1) ,n等于10,则传入参数n-1=9,所以第二次传入9这个参数;
第二次传参9进去,依然不满足n==1的条件,所以,返回的值依然是n*fun(n-1),但是这个时候,因为传参进来的n=9,所以这个时候,再次调用递归,n-1的值,就变成了8,n又变成了8;
以此类推,方法循环调用到n=1,这个时候,因为条件满足n==1这个表达式,所以不再进行递归了,直接输出n的值,n的值已经计算好并返回!

我们把这个计算的步骤拆分成一步步的形式,方便理解,结构如下:

    public class Example {
   
            	/**
            	 * main方法:程序入口
            	 * 手动递归
            	 * @param args
            	 */
            	public static void main(String[] args) {
   
            		int n;
            		n=10*fun
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值