[英]Printing right angle triangle forwards and backwards using asterisks?
好的,這是一個家庭作業問題,在我解釋了這個問題之后,我將告訴您我的簡單問題。
示例:尺寸4由用戶輸入。 最長的行包含四個“ *”
編寫一個遞歸方法printPattern,它將向前和向后插入圖案。 該方法應具有單個參數n,該參數指定了模式中最長行的長度。 如果n小於1,則該方法不應打印任何內容。
這是我的程序:
import java.awt.*;
import hsa.Console;
public class PrintPattern_RichardZhang
{
static Console c; // The output console
public static void main (String[] args)
{
c = new Console ();
int x;
c.println ("Please enter the largest line: ");
x = c.readInt ();
//calling the method printPattern
printPattern (x);
} // main method
//method for printing the pattern
public static void printPattern (int x)
{
if (x > 1)
{
for (int i = 0 ; i < x ; i++)
{
c.print ("*");
}
c.println ();
printPattern (x - 1);
}
for (int i = 0 ; i < x ; i++) //Print on the way back
{
c.print ("*");
}
c.println ();
}
} // PrintPattern_RichardZhang class
我似乎不明白為什么每次打印時它都會使x ++成為可能。 甚至認為這是正確的xD。 那是我的問題。
(int i = 0 ; i < x ; i++) //Print on the way back
{
c.print ("*");
}
c.println ();
您的邏輯是正確的。 但是我會明確寫出退出條件。 對於您的問題:在返回的過程中,它實際上並未增加x。 例如,當最初x = 4時,調用該函數並打印4個星號,然后再次為x = 3調用該函數。然而,由於x是每個單個函數調用的新局部變量,因此不再是相同的x 。 因此,當您為x = 3調用函數時,前一個x(即4)將保留在內存(堆棧)中,以備后用,並在新函數x中創建一個新變量x,並將其分配給3。該函數被調用x = 0。 那時內存中有5個名為x的變量,它們的值分別為4,3,2,1,0,它們都是其調用函數的局部變量。 當遞歸在x = 0處停止時,已暫停的函數調用將使用其各自的局部x變量(分別為1,2,3,4)觸發。 因此,實際上x不會增加。 來自內存的x值以與遞歸函數相反的順序使用。 內存就像遞歸堆棧一樣! 希望對您有所幫助。 祝好運!
只需仔細檢查一下代碼,您就會發現問題所在:
想象一下,以3的X
調用此函數。
首先介紹一下您的功能:
X > 1
,條件已滿足,因此在一行上打印*
3次,然后使用參數2再次調用該函數, X
仍大於1,因此我們現在打印*
兩次並再次調用該函數。
該函數被第三次調用; 現在X
為1,因此條件不滿足,第二個for語句(在記錄中不應為循環,因為到達該行時X
始終為1或更小); 將會打印一次*
並且該函數將結束:因此,此時您將只有正三角形。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.