重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
给你写了下代码,在主函数里调用的时候需要多少以内的阶乘相加就把参数写成多少就好。代码如下:
我们提供的服务有:成都网站制作、成都网站建设、微信公众号开发、网站优化、网站认证、文圣ssl等。为近1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的文圣网站制作公司
public static long factorial(int n) {//求n的阶乘
if(n == 1)
return 1;
return n * factorial(n - 1);
}
public static void print(int n) {//输出等号左边,比如“1! +2!”
if(n == 1) {
System.out.print("1!");
return;
}
print(n - 1);
System.out.print(" +" + n + "!");
}
public static void doFactorSum(int n) {//循环执行,输出最终结果
long result = 0;
for(int i = 1; i = n; i++) {
result += factorial(i);
print(i);
System.out.println("=" + result);
}
}
public static void main(String[] args) {
doFactorSum(20);//调用,得到最终结果
}
有什么问题再追问。
阶乘的公式是
n!=n*(n-1)*(n-2)....*2*1
这个公式可以通过一个java的循环来实现,也就是第一种方法。
for(int i=number; i0;i--)
这个循环在i=0的时候结束, 而阶乘的结果通过result*=i来计算。
public static int compute(int number)
{
int result=1;
for(int i=number;i0;i--){
result*=i;
}
return result;
}
public static void main(String[] args)
{
System.out.println(compute(30)); //789912231223232323211
}
第二种是通过递归来实现阶乘。
递归就是方法调用自身, 最终通过一个出口来结束程序的调用。
这个出口要保证程序不出现死循环。
在上面的f(x)- n*f(x-1)这里, 出口就可以设置为
if(1==number)
{return 1;}
代码实现:
public static int cur(int number){
if(number!=0){
return number*cur(number-1);
}else return 1;
}
2000的阶乘太大了,一般的方法是计算不出来的 )_(
class Factorial
{
public static void main(String[] args)
{
int n = 5; //假设输入的数是 5
int sum = 1;
if (n 0)
{
System.out.println("n is overflow");
return ;
}
else if (n == 0)
{
n = 0;
}
else {
for (int i = 1; i = n ; i ++)
{
sum = sum * i;
}
}
System.out.println("n! = " + sum);
}
}