簡體   English   中英

使用星號前后打印直角三角形?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM