递归算法深入浅出二:递归n的阶乘


递归概述及常见算法列表,传送门:
http://blog.csdn.net/nthack5730/article/details/65537530


n的阶乘

阶乘是所有小于及等于该数的正整数的,并且0的阶乘为1。自然数n的阶乘写作n!


n的阶乘求法

n的阶乘常见有两种方法求解:

第一种是循环(最常见)

    public static void main(String[] args) {
        int n = 10;
        int sum = 1;

        for (int i = 1; i <= 10; i++) { 
            sum *= i;
        }

        System.out.println(sum);
    }

输出结果:

3628800
这里就不再做详细解析了


此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/65785394
更多有关老猫的文章:http://blog.csdn.net/nthack5730


第二种就是递归

根据第一篇文章(顶部有传送门)中提过的递归的两大设计要点来设计:定义终止条件

1.根据我们要的数据,程序定义就是:

程序返回的是当前n的阶乘的值
重点来了:
假设我们求的是10的阶乘【10!】,那么就必须要知道9的阶乘【9!】,由此得出【10! = 9! * 10】
每个阶层都以此类推,当到达1时,我们都知道:1的阶乘的值为1,那么直接返回1就好了!
用函数f()表示阶乘【n!】:f(n) = f(n-1) * n

2.终止条件

当n到达1时,返回1的阶乘【1! = 1】【return 1】,否则继续调用自身,返回前一个数的阶乘的值
当然,你也可以在n=2时返回2或者在n=4时返回24,只要符合结果就行!(但是这就要知道n的取值范围了)

3.根据上述,不难得出程序代码:
    public static long fun(int n){
        if (n <= 1){
            return 1;
        }else{
            return fun(n-1) * n;
        }
    }

此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/65785394
更多有关老猫的文章:http://blog.csdn.net/nthack5730


  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值