Java中使用递归反向打印阶乘
我对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
// 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-理解这个概念很重要-当你在树结构中使用递归时,它非常有用。