一种算法调用自己来完成它的部分工作,就称这种算法是递归的(Recursive)。一个递归算法必须有两个部分:初始情况和递归部分。初始情况只处理可以直接解决而不需要再次递归调用的简单输入。递归部分则包含对算法的一次或者多次递归调用,每一次的调用参数都在某种程度上比原始调用参数更接近初始情况。
计算 N! 的递归算法
public class RecurveFac {
public static void main(String[] args) {
//将输入参数转换为整形;Java中int型有4个字节,每个字节8位,所以int范围有2的32次方那么大。
int number = Integer.parseInt(args[0]);
if (number<0 || number >14)
{
System.out.println("Number is out of range!!!");
System.exit(0);
}
int result = recFactorial(number);
System.out.print(result);
}
private static int recFactorial(int Num){
int i = Num;
//初始情况
if(i<=1) return 1;
//递归部分,假设 i=3;第一次 recFactorial(3-1)*3;
// ||
// recFactorial(2-1)*2;
// ||
//return 的结果为: recFactorial(1)×2×3; recFactorial(1)满足初始情况,return 1;
//最终结果为:1×2×3
return recFactorial(i-1)*i;
}
}
********
非递归实现N!
public class factorial {
public static void main(String[] args) {
int N= Integer.parseInt(args[0]);
int result=fac(N);
System.out.println(N+"! is "+result);
}
private static int fac(int n){
int t=1;
for(int Num=n;Num>1;Num--){
t*=Num;
}
return t;
}
}