打印阶乘递归方法时 Java 中的错误? 'printing command' 之前打印的输出

Bug in Java when printing factorial recursive method? Output printed before 'printing command'

我目前正在学习 java 并且正在学习递归。我尝试了这两种相同的方法,但我认为其中一种方法很奇怪。这是 Java 中的错误吗?还是只有我不懂逻辑

谁能解释一下?

JAVA 我使用:

java版本“1.8.0_261”

Java(TM) SE 运行时环境(build 1.8.0_261-b12)

Java HotSpot(TM) 客户端 VM(构建 25.261-b12,混合模式,共享)

这是我的代码:

第一个案例:

public class App {
public static void main(String[] args) {
    int value = 5;

    System.out.println("Factorial " + value + " = " + faktorial(value));
}

public static int faktorial(int value) {
    
    if (value > 1) {
        System.out.print(value + " * ");
    }
    
    if (value == 1) {
        System.out.println("1");
        return 1;
    }

    return value * faktorial(value-1);
}

}

第一个案例的输出将是:

5 * 4 * 3 * 2 * 1 <== 这里有些奇怪,它应该在 'Factorial 5 = ' 之后打印,而不是在

之前打印

阶乘 5 = 120

在第二种情况下:

public class App {
public static void main(String[] args) {
    int value = 5;

    System.out.print("Factorial " + value + " = "); //HERE IS THE CHANGE
    System.out.println(faktorial(value)); //HERE IS THE CHANGE
}

public static int faktorial(int value) {
    
    if (value > 1) {
        System.out.print(value + " * ");
    }
    
    if (value == 1) {
        System.out.println("1");
        return 1;
    }

    return value * faktorial(value-1);
}

}

第二个案例的输出将是:

阶乘 5 = 5 * 4 * 3 * 2 * 1 <== 运行 顺序正确

120

在您的这一行代码中(来自案例 1):

System.out.println("Factorial " + value + " = " + faktorial(value));

方法 faktorialprintln.
之前 被调用 这就是 faktorial 的输出首先出现的原因。

我建议你 运行 你的代码带有调试器(每个好的 IDE 都有一个)然后你自己看看。

行中调用函数faktorial

System.out.println("Factorial " + value + " = " + faktorial(value));

虽然函数是运行它会打印你写的所有打印语句,然后当你得到函数faktorial的return值时,那么行"Factorial " + value + " = " + faktorial(value) 将被打印出来。

第二个例子也有类似的情况,先打印函数的打印语句,在函数returns之后,你会得到打印函数的return值。

您的代码的行为是正确的:System.out.println 是一个函数,因此它在执行之前评估其参数;对其参数的评估意味着在 faktorial 内打印,因此从您的角度解释了打印的倒序。