递归介绍和利用递归算法求阶乘
题目
题目:利用递归方法求5的阶乘。
温馨提示:n=5很容易求解,如果n=20呢?20!已经远远走出抄4字节整型范围,所以需要用8字节整型或双精度浮点型来完成算法。
算法分析
什么是递归方法?在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法,直到满足终止条件,返回结果的过程。实际上,递归,顾名思义,其包含了两个意思:递和归,这正是递归思想的精华所在。递就是原问题把要计算的结果传给子问题,归则是子问题求出结果后,把结果层层返回原问题的过程。
递归是一种分而治之、将复杂问题转换为简单问题的求解方法,它具有以下优缺点:
优点:使用递归编写的程序简洁、结构清晰,程序的正确性很容易证明,不需要了解递归调用的细节。
缺点:递归函数在调用的过程中,每一层调用都需要保存临时性变量和返回地址、传递参数,因此递归函数的执行效率低。
递归算法的三要素:
1.大问题可以拆分为若干小问题;
2.原问题与子问题除数据规模不同,求解思路相同;
3.存在递归终止条件。
递归使用场景比较多,当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定。如:求n的阶乘、斐波那契数列、求n个数的最大、青蛙跳台阶问题和汉诺塔问、数制转换、求最大公约数都属于简单递归。
源码实现
利用递归公式fn=fn_1*fn_2
求解。
/**
* 递归求阶乘
*
* @param n 阶乘数
*/
public static long recursion(long n) {
long value = 0;
if (n == 1 || n == 0) {
value = 1;
} else if (n > 1) {
value = n * recursion(n - 1);
}
return value;
}
/**
* 简化代码流程
*/
public static long recursionPlus(long num) {
if (num <= 1) {
return num;
}
return num * recursionPlus(num - 1);
}
读后有收获,小礼物走一走,请作者喝咖啡。
Buy me a coffee. ☕Get red packets.
作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。