java中递归求阶乘

1. 什么是阶乘?
做这个题目首先弄清什么叫阶乘,一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1,即3的阶乘为3 * 2 * 1=6。
2. 什么是递归?
简单来说就是程序自己调用自己,当满足一定条件时跳出。
3. 具体实现方法

  • 一般来说要跳出递归就需要使用return,那么我们就需要用有返回值的方法定义,这里我把方法名定义为test
public int test(int n){
	int product=0; //定义product来存放阶乘的乘积
		//搭好架子一步一步来
	return product;//返回乘积
}

这样我们就把架子搭好了

  • 然后回到递归我们发现当n为0的时候阶乘为1我们就需要把这个情况写出来。
public int test(int n){
	int product=0;
	if(n==0){
		return 1;//为0的情况我们直接返回1
	}
	return product;
}
  • 处理好这两种情况我们再继续往下走,再进行下一步之前我们来看看阶乘有什么特性或是规律来使用递归。
    第一组:2!=2 * 1
    第二组:3!=3 * 2 * 1
    第三组:4!=4 * 3 * 2 * 1
    仔细观察第二组的3 * 2 * 1中的2 * 1是不是就是第一组相当于3!=3 *(2!)。
    那第三组4!=4 * 3 * 2 * 1中的3 * 2 * 1是不是就是第二组的乘积
    相当于4!=4 *(3!)。
    规律已经显而易见n!=n * (n-1)!

让我们带入代码,当n=1时

public int test(int n){
	int product=0;
	if(n==0){
		return 1;//为0的情况我们直接返回1
	}
	if(n==1){
		product=1;//为1是那就是1!=1*(1-1)!      1!=1*(0!)
	}
	return product;
}

当为n时直接上代码,我再解读一遍我相信你一定能弄明白

public int test(int n){
	int product=0;
	if(n==0){
		return 1;//为0的情况我们直接返回1
	}
	if(n==1){
		product=1;
	}
	product=n*test(n-1);//关键代码product储存递归值调用test也就是本身
						//继续执行,当初次递减到1时跳出返回最后答案
	return product;
}

关键代码实现递归!!!product=n * test(n-1);这里的test就是调用自己
我们设想n=3,将3带入程序走一遍,为3时跳过了为0为1的情况直接进入product=n * test(n-1);带入3为
3 * test(2) ,这里程序并没有往下return,而是调用了本身就是test方法来执行 test(2)。
继续往下当2传入程序为2 * test(1); 也没有跳出,所以最后放n逐次递减为1时计算3 * 2 * 1才跳出最后的答案

  • 最后递归的问题就这样完成了,可能我讲得有点复杂化了,但是最重要的还是找出规律才能使用递归,本身也就是自己调用自己去做相同的操作。