我一直在试图弄清楚为什么产量是321,而不是123。我试过好几次,看过讲稿,但是我仍然找不到解决这个问题的办法。
public static void main(String[] args) {
printNumber(1);
}
public static void printNumber(int n) {
if(n!=4) {
printNumber(n + 1);
System.out.print(n);
}
}发布于 2017-11-22 11:39:06
每个对printNumber的调用都首先调用printNumber(n+1),然后打印出一些内容。所以printNumber(n+1)在printNumber(n)打印出它的号码之前就已经完成了。
main():
printNumber(1):
printNumber(2):
printNumber(3):
printNumber(4) // does nothing
print(n) // "3"
// printNumber(3) completes, returning control to printNumber(2)
print(n) // "2"
// printNumber(2) completes, returning control to printNumber(1)
print(n) // "1"
// printNumber(1) completes, returning control to main()
// main() completes发布于 2017-11-22 11:39:21
变量n为12或3。
你先打印什么,n还是n + 1?您先打印n + 1,然后打印n。因此,数字必须以相反的顺序出现。
发布于 2017-11-22 12:06:14
这个结果的原因是,您将递归调用语句printNumber(n + 1)放在System.out.print(n)打印语句之前,因此它将一直递归地调用它,直到它到达4之后,它将打印从最后一次调用n+1到n的数字,就像我们从3到1的例子一样。
试试这个:
public static void printNumber(int n) {
if(n!=4) {
System.out.print(n);
printNumber(n + 1);
}
}您将发现输出:123
原因是在每次递归调用时,它都会打印数字n,然后再次调用n+1,直到到达4为止。
https://stackoverflow.com/questions/47433563
复制相似问题