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

运行结果



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值