1.问题描述
自然数由1~n的n个数连乘积叫作n的阶乘,记作n!。要求设计一个算法,可以根据输入的数字计算其相应的阶乘。
2.问题分析
这是一个比较简单的问题,所谓阶乘实际就是n内数字的连续相乘的运算,想必大家都做过连加问题,俩者的解决思路其实很相近。但是要了解递归的思路实现会更加简洁。
3.解决方案
- 方案1:
既然阶乘就是连续乘积,那么我们可以设计一个循环体,在循环体外声明俩个变量,一个存放乘积,另一个存放需要计算的数字temp,而循环体内则进行乘积运算,每乘一次需要temp自加并与n进行比较,以此类推,直到temp>n结束循环,返回结果。
- 方案2:
如下图,每一次运算都需要调用上一次的结果,也就是将我做的任务的之前部分交给其他人,需要我做的时候直接拿来别人的结果用。而且阶乘的计算有明显的结束标志,即计算完n阶阶乘就算完成任务。这很明显是一种典型的递归问题,那么就直接采用递归的思想进行计算。
4.算法实现
public class Box{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(true){
System.out.print("please input a number:");
int num=sc.nextInt();
System.out.println();
System.out.println("method1---the factorial of "+num+" is:" +fact(num));
System.out.println("method2---the factorial of "+num+" is:" +recurrence(num));
}
}
//采用循环连乘法
public static int fact(int num){
int temp=1;
int factorial=1;
while(num>=temp){
factorial=factorial*temp;
temp++;
}
return factorial;
}
//采用递归法
public static int recurrence(int num){
if(num<=1)
return 1;
else
return num*recurrence(num-1);
}
}
运行结果