Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阶乘递归_Java_Recursion - Fatal编程技术网

Java 阶乘递归

Java 阶乘递归,java,recursion,Java,Recursion,我已经搜索了这个网站,虽然它已经被回答了很多次,但我还有一个问题 我有用递归进行阶乘运算的代码。我只是在最简单的部分遇到了麻烦 打印时,我的项目要求打印: 4! is equal to 4 x 3 x 2 x 1 = 24 如何获得for循环,或以递归方式获得(4 x 3 x 2 x 1)以使用任意值n import java.util.Scanner; public class Factorial { public static void main(String args[])

我已经搜索了这个网站,虽然它已经被回答了很多次,但我还有一个问题

我有用递归进行阶乘运算的代码。我只是在最简单的部分遇到了麻烦

打印时,我的项目要求打印:

4! is equal to 4 x 3 x 2 x 1 = 24
如何获得
for
循环,或以递归方式获得
(4 x 3 x 2 x 1)
以使用任意值n

import java.util.Scanner;

public class Factorial 
{
    public static void main(String args[])
    {
        System.out.println("Enter an integer:");
        Scanner keyboard= new Scanner(System.in);
        int num=keyboard.nextInt();
        System.out.print(num+ "!"+ " is equal to ");
        Print(num);
        System.out.print(FactorialCalc(num));
    }

    public static double FactorialCalc(int number)
    {
        double result;
        if(number<=1)
        {    
            result= 1;                  
            return result;
        }    
        else
        {
            return result= number * FactorialCalc(number-1);
        }
    }

    public static void Print(int n)
    {
        for(int i=n; i<=0;i--)
        {
            System.out.print(n + 'x' + (n-1));
        }
    }
}
import java.util.Scanner;
公共类阶乘
{
公共静态void main(字符串参数[])
{
System.out.println(“输入一个整数:”);
扫描仪键盘=新扫描仪(System.in);
int num=keyboard.nextInt();
系统输出打印(num+“!”+”等于“);
打印(num);
系统输出打印(FactorialCalc(num));
}
公共静态双因子ALC(整数)
{
双重结果;

如果(数字一个使用for循环的非常简单的解决方案

int fact=1;
for(int i=1;i<n;i++)
fact=fact*i;
int-fact=1;

对于(int i=1;i使用for循环的非常简单的解决方案是

int fact=1;
for(int i=1;i<n;i++)
fact=fact*i;
int-fact=1;

对于(int i=1;i您的代码有效,您只忘记了一件事:

在打印方法中,哪个变量用于计算for循环的迭代次数?它在循环中的值是什么

public static void Print(int n)
{
    for(int i=n; i<=0;i--) //i minor or equal 0? When does the loop need to finish?
                           //What happens if you multiply something with 0?
    {
        System.out.print(n + 'x' + (n-1));
    }

}
公共静态无效打印(int n)
{

对于(int i=n;i您的代码有效,您只忘记了一件事:

在打印方法中,哪个变量用于计算for循环的迭代次数?它在循环中的值是什么

public static void Print(int n)
{
    for(int i=n; i<=0;i--) //i minor or equal 0? When does the loop need to finish?
                           //What happens if you multiply something with 0?
    {
        System.out.print(n + 'x' + (n-1));
    }

}
公共静态无效打印(int n)
{
对于(int i=n;i
以及输出:

Enter an integer:
4
4! is equal to 4x3x2x1=24.0
以及输出:

Enter an integer:
4
4! is equal to 4x3x2x1=24.0

您可以将打印相乘值列表直接合并到递归中,而不是添加循环打印。在递归的
if
else
子句中都放入适当的
print()
语句。对于前者,只需打印
“1=”
。对于后者,打印
number+“x”

实际上,您不需要局部变量
result
。我还建议使用有关大小写的Java约定:方法名称应以小写字母开头,大写字母表示类或接口。最后,我将返回类型更改为
long
,因为阶乘是基于整数的,即使它们可以令人讨厌的变大

import java.util.Scanner;

public class Factorial {
   public static long printFactorial(int number) {
      if(number <= 1) {    
         System.out.print("1 = ");
         return 1;
      } else {
         System.out.print(number + " x ");
         return number * printFactorial(number-1);
      }
   }

   public static void main(String args[]) {
      System.out.print("Enter an integer: ");
      Scanner keyboard= new Scanner(System.in);
      int num=keyboard.nextInt();
      System.out.print(num + "! is equal to ");
      System.out.println(printFactorial(num));
   }
}
import java.util.Scanner;
公共类阶乘{
公共静态长打印阶乘(整数){

if(number您可以将打印相乘值列表直接合并到递归中,而不是添加循环打印。在递归的
if
else
子句中都放入适当的
print()
语句。对于前者,只需打印
“1=”
。对于后者,请打印
number+“x”

实际上,您不需要局部变量
result
。我还建议使用有关大小写的Java约定:方法名称应以小写字母开头,大写字母表示类或接口。最后,我将返回类型更改为
long
,因为阶乘是基于整数的,即使它们可以令人讨厌的变大

import java.util.Scanner;

public class Factorial {
   public static long printFactorial(int number) {
      if(number <= 1) {    
         System.out.print("1 = ");
         return 1;
      } else {
         System.out.print(number + " x ");
         return number * printFactorial(number-1);
      }
   }

   public static void main(String args[]) {
      System.out.print("Enter an integer: ");
      Scanner keyboard= new Scanner(System.in);
      int num=keyboard.nextInt();
      System.out.print(num + "! is equal to ");
      System.out.println(printFactorial(num));
   }
}
import java.util.Scanner;
公共类阶乘{
公共静态长打印阶乘(整数){

if(数字提示:在
Print
方法中,哪个变量用于计算
for
循环的迭代次数?它在循环中的值是什么?您正在询问如何生成实际的
Z!Z x(Z-1)x(Z-2)…x 1
输出(int i=n;iMarc B是的,我只需要生成它,代码就可以正常工作。提示:在
Print
方法中,哪个变量用于计算
for
循环的迭代次数?它在循环中的值是什么?你在问如何生成实际的
Z!是zx(Z-1)x(Z-2)…x1
输出(inti=n;iMarc B是的,我只需要生成它,代码就可以正常工作。
i<=0
是一个不好的有条件的ontop。
i<=0
是一个不好的有条件的ontop。@Vigan很高兴我能提供帮助。唯一的“增强”如果输入的数字是负数,我会加上一条错误消息。除此之外,你得到了我的选票!是的,这是正确的。祝你好运,当你的老师问你“继续”是什么意思(以及它为什么在那里);)哎呀!根据定义,0!=1,这个代码没有打印出来。这需要修正。@维根很高兴我能提供帮助。如果输入的数字是负数,我唯一要添加的“增强”是一条错误消息。除此之外,你得到了我的投票!是的,这是正确的。祝你好运,你的老师会问“继续”是什么意思(以及它为什么在那里);)哎呀!根据定义,0!=1,而这段代码不会打印出来。这需要修正。