Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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_Factorial - Fatal编程技术网

Java中使用递归反向打印阶乘

Java中使用递归反向打印阶乘,java,recursion,factorial,Java,Recursion,Factorial,我对java非常陌生,在一次作业中,我们得到了一段错误的代码: 班长{ // pre: assume n is greater or equal 0, but smaller than 100. // post: return n! where n!=n*(n-1)! and 0!=1. public static long fac(int n){ System.out.println(n); long t = n*fac(n-1); if

我对java非常陌生,在一次作业中,我们得到了一段错误的代码:

班长{

// pre: assume n is greater or equal 0, but smaller than 100.
// post: return n! where n!=n*(n-1)! and 0!=1.
public static long fac(int n){
    System.out.println(n);
    long t = n*fac(n-1);                
    if (n < 0) 
        return 1;       
    return t;
}

//--------------------------------------------------------------------------
// this is the test code for the judge, do not modify   
public static void main(String[] arg){

    // test function
    java.util.Scanner scanner = new java.util.Scanner(System.in);
    while(scanner.hasNextInt()){
        int input_integer=scanner.nextInt();
        fac(input_integer);         
    }
    scanner.close();
//---------------------------------------------------------------------------       

}
//pre:假设n大于或等于0,但小于100。
//post:返回n!其中n!=n*(n-1)!和0!=1。
公共静态长fac(int n){
系统输出println(n);
长t=n*fac(n-1);
if(n<0)
返回1;
返回t;
}
//--------------------------------------------------------------------------
//这是测试代码,供判断,不要修改
公共静态void main(字符串[]arg){
//测试功能
java.util.Scanner Scanner=新的java.util.Scanner(System.in);
while(scanner.hasNextInt()){
int input_integer=scanner.nextInt();
fac(输入_整数);
}
scanner.close();
//---------------------------------------------------------------------------       
}
我已经通过删除变量修复了堆栈溢出问题

// pre: assume n is greater or equal 0, but smaller than 20.
// post: return n! where n!=n*(n-1)! and 0!=1.
public static long fac(int n){
    System.out.println(n);
    if (n <= 1)
        return 1;
    else return fac(n-1)*n; 

}
//pre:假设n大于或等于0,但小于20。
//post:返回n!其中n!=n*(n-1)!和0!=1。
公共静态长fac(int n){
系统输出println(n);

如果(n1,1,2,6)

只需在计算后打印它

public static long fac(int n) {
    long f = (n <= 1 ? 1 : fac(n - 1) * n);
    System.out.println(f);
    return f;
}
公共静态长fac(int n){
长f=(n
  • 堆栈溢出不是因为有变量,而是 因为您在检查 终止条件

  • 在递归调用之后打印结果,而不是在递归调用之前打印参数,可以满足您的需要

  • 以下是如果您坚持使用原始变量并使用
    if
    语句时的情况:

    public static long fac(int n){
      if (n < 0) 
        return 1;       
      long t = n * fac(n-1);                
      System.out.println(t);
      return t;
    }
    
    公共静态长fac(int n){
    if(n<0)
    返回1;
    长t=n*fac(n-1);
    系统输出打印ln(t);
    返回t;
    }
    
    @NinaHain-理解这个概念很重要-当你在树结构中使用递归时,它非常有用。