我試圖拼湊這個例子中的邏輯。這是正常的代碼。僅供參考,我有一位大學導師幫我舉了這個例子,但他仍在試圖弄清楚如何向我解釋。代碼也做完了,這只是為了我自己的遞回知識。
public class Practice {
public static void printTriangle(int n) {
if (n < 1) {
return;
}
else {
printTriangle(n - 1);
printStars(n);
System.out.println();
}
}
public static void printStars(int n) {
if (n > 0) {
System.out.print("*");
printStars(n-1);
}
}
public static void main(String[] args) {
printTriangle(5);
}
}
Output
*
**
***
****
*****
這是帶有標記的測驗代碼,我用來找出發生了什么。這有點讓人眼花繚亂,所以如果你認為你可以不用看這個爛攤子就可以解釋它,無論如何。
public class Practice {
public static void printTriangle(int n) {
if (n < 1) {
System.out.println(n);
return;
}
else {
System.out.println("1");
printTriangle(n - 1);
System.out.println(n);
printStars(n);
System.out.println("A");
}
}
public static void printStars(int n) {
if (n > 0) {
System.out.print(n);
System.out.print("*");
printStars(n-1);
}
}
public static void main(String[] args) {
printTriangle(5);
}
}
1
1
1
1
1
0
1
1*A
2
2*1*A
3
3*2*1*A
4
4*3*2*1*A
5
5*4*3*2*1*A
我已經弄清楚了,直到第一顆星被列印出來。我在 printTriangle 方法將其減為 0 之后列印了 n 的值,然后在列印第一個星之前列印了 n 的值,不知何故,它等于 1。我只是好奇 n 的值是如何增加。該值在 1 處進入 printStars 方法,并且在列印星星時也不斷增加
uj5u.com熱心網友回復:
我希望通過提供書面和視覺解釋來回答您的問題:
書面:
首先我們從printTriangle(5). 既然n < 1是假的,我們繼續做printTriangle(4)。這個程序一直持續到我們到達printTriangle(0)。由于printTriangle(0)不會輸出任何東西(因為0 < 1是真的),我們從printTriangle(1):
從printTriangle(1)我們去printStars(1)。我們只能從這里列印一顆星。完成此操作后,我們列印一個換行符。接下來,我們有printTriangle(2)它引導我們進入printStars(2). 這給了 1 顆星,但通向printStars(1)其中給了我們第二顆星和換行符。這個程序一直持續到我們達到 5 顆星。
視覺表現:

我希望這有助于回答你的問題!如果您需要進一步的說明或詳細資訊,請告訴我:)
uj5u.com熱心網友回復:
好吧,
printTriangle(5) 呼叫 printTriangle(4)
printTriangle(4) 呼叫 printTriangle(3)
printTriangle(3) 呼叫 printTriangle(2)
printTriangle(2) 呼叫 printTriangle(1) printTriangle(1) 呼叫 printTriangle(0)
printTriangle(0) 確實什么都沒有,但回傳 printTriangle(1)
printTriangle(1) 繼續呼叫 printStars(1)
printStars(1) 列印一個星形并呼叫 printStars(0)
printStars(0) 什么都不做并回傳到 printStars(1)
printStars(1) 沒有任何事情要做并回傳到 printTriangle (1)
printTriangle(1) 列印換行符并回傳 printTriangle(2)
printTriangle(2) 繼續呼叫 printStars(2)
printStars(2) 列印一個星形并呼叫 printStars(1)
printStars(1) 列印一個星形并呼叫 printStars(0)
printStars(0) 什么都不做并回傳到 printStars(1)
printStars(1) 無事可做并回傳 printStars(2)
printStars(2) 無事可做并回傳 printTriangle(2)
printTriangle(2) 列印換行符并回傳 printTriangle(3)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/435096.html
上一篇:根據先前的值撰寫串列推導?
