java - 打印阶乘递归方法时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
解决方案
该函数faktorial
在行中被调用,
System.out.println("Factorial " + value + " = " + faktorial(value));
在函数运行时,它将打印您编写的所有打印语句,然后当您获得 function 的返回值时,将打印faktorial
该行。"Factorial " + value + " = " + faktorial(value)
第二个例子也发生了类似的情况,首先打印函数的打印语句,在函数返回后,您将获得打印的函数的返回值。
推荐阅读
- python - 如何将条件聚合应用于系列?
- python-3.x - 我使用 sklearn 进行语言识别的数据集有问题吗?
- html - 如何在可滚动div的顶部和底部获得褪色阴影,或者隐藏在它们各自的末端
- python - 使用rest api在谷歌驱动器中创建新文件夹
- html - 如何更改网站不同位置的背景颜色?
- java - Java如何仅更改字段分隔符而不更改实际数据
- sed - 删除“.200.300”。从字符串
- elasticsearch - 在添加到 ES 时 JSON 数组的 mapper_parsing_exception 错误
- erlang - 如何处理 odbc:start() 的返回值。erlang中的函数?
- javascript - 带有显示的选择下的唯一选项:无样式不会在 windows 的 Firefox 中显示下拉菜单