一行代码实现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