递归算法深入浅出二:递归n的阶乘
2017-03-25 03:14
756 查看
递归概述及常见算法列表,传送门:
http://blog.csdn.net/nthack5730/article/details/65537530
输出结果:
3628800
这里就不再做详细解析了
此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/65785394
更多有关老猫的文章:http://blog.csdn.net/nthack5730
重点来了:
假设我们求的是10的阶乘【10!】,那么就必须要知道9的阶乘【9!】,由此得出【10! = 9! * 10】
每个阶层都以此类推,当到达1时,我们都知道:1的阶乘的值为1,那么直接返回1就好了!
用函数f()表示阶乘【n!】:f(n) = f(n-1) * n
当然,你也可以在n=2时返回2或者在n=4时返回24,只要符合结果就行!(但是这就要知道n的取值范围了)
此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/65785394
更多有关老猫的文章:http://blog.csdn.net/nthack5730
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
相关文章推荐
- 递归算法深入浅出三:递归求Fibonacci斐波那契数列
- 递归算法深入浅出四:递归判断回文串以及递归辅助方法
- 递归算法深入浅出一:递归理论概述和常见递归算法罗列
- 求递归算法时间复杂度:递归树
- 数据结构之递归小练习(定义,阶乘,求和,汉诺塔)
- 递归的练习——使用递归算法利用欧几里得算法,得出最大公约数
- 阶乘的递归实现和非递归实现
- 第十三周——递归求阶乘
- 递归小程序之求阶乘
- python递归求阶乘
- [shell]递归求阶乘
- 第12周项目3递归求阶乘
- 第十二周项目 2 用递归方法求解(1)——求出n的阶乘
- JavaSE第八十八讲:递归详解以及递归在阶乘与斐波那契数列的使用
- 递归算法-求n的阶乘,超能生兔子-java实现
- 求递归算法时间复杂度:递归树
- c语言递归实现100的阶乘
- 1~n的阶乘递归算法
- c语言递归算法--深入浅出(1)
- 编程题:用递归调用实现,求N!(!阶乘)。