【发布时间】:2020-08-26 06:10:10
【问题描述】:
我目前正在学习 java 并且正在学习递归。我尝试了这两种相同的方法,但我认为其中一种表现得很奇怪。它是Java中的错误吗?还是只有我不懂逻辑。
有人能解释一下吗?
我使用的 JAVA:
java 版本“1.8.0_261”
Java(TM) SE 运行时环境(内部版本 1.8.0_261-b12)
Java HotSpot(TM) 客户端虚拟机(内部版本 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);
}
}
第二个案例的输出将是:
阶乘 5 = 5 * 4 * 3 * 2 * 1
120
【问题讨论】:
-
它是 Java 中的错误吗? 在所有情况下,您的代码都会有问题,而不是 Java 有问题。请了解 Java 中的运算符优先级及其工作原理。
-
欢迎来到 Stack Overflow。作为一般性建议,我建议不要保留责备的心理偏见 - 您发现了一个 Java 平台错误,就在您第一次感到困惑之后。你会有很多这样的时刻。 :) 许多聪明的人都在努力将这种美丽的语言保持为有史以来最好的语言之一。您可能会发现一个真正的错误,没有人声称相反,但首先尝试理解 Java 中的简单事物。此外,看看你的 faktorial 方法做了什么。
-
您好 Giorgi,感谢您的回复 :) 此评论指出“您将有很多这样的时刻”。我仍然在弄清楚学习编程的周期。
-
@PradeepSimha 这与运算符优先级无关,而是与评估顺序有关。