微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

有人可以对此进行解释吗?

我使用的JAVA:

java版本“ 1.8.0_261”

Java(TM)SE运行时环境(内部版本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

基础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);
}

}

第二个CASE的输出为:

要素5 = 5 * 4 * 3 * 2 * 1

120

解决方法

在行中调用函数faktorial

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

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

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

,

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

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

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

我建议您使用调试器(每个优秀的IDE都有一个)运行代码,然后亲自看看。

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。