好吧,这是一个家庭作业问题,在解释完这个问题后我会告诉你我的简单问题。
示例:尺寸 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 并分配给 3。这种情况一直持续到当 x=0 时调用该函数。此时内存中有5个名为x的变量,它们的值分别是4,3,2,1,0,它们都是调用函数的局部变量。当递归在 x=0 处停止时,暂停的函数调用将通过其各自的局部 x 变量(分别为 1、2、3、4)触发。因此,x实际上并没有增加。内存中的 x 值以与调用的递归函数相反的顺序使用。内存就像递归中的堆栈一样!我希望这有帮助。祝你好运!
关于java - 使用星号向前和向后打印直角三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334241/