首页 > 解决方案 > 打印阶乘递归方法时Java中的错误?在“打印命令”之前打印的输出

问题描述

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

有谁可以对此作出解释?

我使用的 JAVA:

java版本“1.8.0_261”

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

Java HotSpot(TM) Client VM(build 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 <== 这就是奇怪的地方,应该在“阶乘 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

标签: javadebuggingsun

解决方案


该函数faktorial在行中被调用,

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

在函数运行时,它将打印您编写的所有打印语句,然后当您获得 function 的返回值时,将打印faktorial该行。"Factorial " + value + " = " + faktorial(value)

第二个例子也发生了类似的情况,首先打印函数的打印语句,在函数返回后,您将获得打印的函数的返回值。


推荐阅读