我将基本情况表示为emptySpace=0
,在if条件中将基本情况指定为star=0
。我期望程序在打印星星之后先打印空格,但情况恰恰相反。它不应该先打印空格然后再打印星星吗?
public static void displayStarss(int emptySpace, int star) {
if (emptySpace != 0) {
displayStarss(emptySpace - 1, star);
System.out.print(" ");
} else if (star != 0) {
displayStarss(emptySpace, star - 1);
System.out.print("*");
}
}
public static void main(String[] args) {
displayStarss(3, 3);
}
答案 0 :(得分:2)
它会按照您的订单执行操作:
displayStarss(3, 3);
-> displayStarss(2, 3);
-> -> displayStarss(1, 3);
-> -> -> displayStarss(0, 3);
-> -> -> -> displayStarss(0, 2);
-> -> -> -> -> displayStarss(0, 1);
-> -> -> -> -> -> displayStarss(0, 0);
-> -> -> -> -> System.out.print("*");
-> -> -> -> System.out.print("*");
-> -> -> System.out.print("*");
-> -> System.out.print(" ");
-> System.out.print(" ");
System.out.print(" ");
答案 1 :(得分:0)
让我们说我们用emptySpace
和stars
的参数2来称呼它
通话按
displayStarss(2, 2) //called from main (starting point)
displayStarss(1, 2) //called from if
displayStarss(0, 2) //called from if
displayStarss(0, 1) //called from else if
displayStarss(0, 0) //called from else if
<<recursion ends here and it returns>>
现在,如果您展开上述调用顺序,可以看出它必须在空格之前打印星星。
答案 2 :(得分:0)
不是。它可以按顺序执行。这完全取决于您如何构造程序。 请考虑以下内容:
public static void count(int n) {
// when n == 0 start the return process
if (n == 0) {
return;
}
// Nothing has been printed yet
// Call count again, this time with one less than n.
count(n - 1);
// all returns will end up here, restoring each previously
// altered value of n.
System.out.println(n);
}
此程序将打印从1
到n
的所有值。这是因为print语句是after
的对count
的递归调用,每次都指定小于n
的位置。因此,调用堆栈将保留这些值并按顺序返回它们。
如果将打印语句移动到调用count
的正前方,则值将从n
打印到1
。在后一种情况下,返回仍然发生,但是什么也没做,因此它们只是连续返回,直到方法返回到原始调用者为止。