Java实现n阶阶乘的计算

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);
	}
}

运行结果



猜你喜欢

转载自blog.csdn.net/goodli199309/article/details/80079973