使用递归的n高度Java三角形

使用递归的n高度Java三角形,java,Java,假设名为makeLine的方法可用,该方法可以传递一个非负整数n和一个字符c,并返回一个由n个完全等于c的相同字符组成的字符串。编写一个名为printTriangle的方法,该方法接收两个整数参数n和k。如果n为负,则该方法不执行任何操作。如果n恰好是偶数,则其值将提升到下一个奇数(例如4-->5)。然后,当k的值为零时,该方法按如下方式打印O的对称三角形(大写字母O):首先是一行n-O,然后是一行n-2 O(缩进一个空格),然后是一行n-4 O(缩进两个空格),依此类推。例如,如果该方法接收到

假设名为makeLine的方法可用,该方法可以传递一个非负整数n和一个字符c,并返回一个由n个完全等于c的相同字符组成的字符串。编写一个名为printTriangle的方法,该方法接收两个整数参数n和k。如果n为负,则该方法不执行任何操作。如果n恰好是偶数,则其值将提升到下一个奇数(例如4-->5)。然后,当k的值为零时,该方法按如下方式打印O的对称三角形(大写字母O):首先是一行n-O,然后是一行n-2 O(缩进一个空格),然后是一行n-4 O(缩进两个空格),依此类推。例如,如果该方法接收到5,0(或4,0),它将打印:

注意:在上面的输出中,第一行在第一个O之前包含0个空格,下一行包含1个空格,依此类推

注意:这些指令说明了当k为零时该方法做什么,但这取决于您,程序员,来确定当k不为零时该方法做什么,并为您的利益使用它

该方法不能使用任何类型的循环(for、while、do-while)来完成其工作。该方法应该调用makeLine来完成创建不同长度字符串的任务

这就是我目前所拥有的。我搞不清楚该把间隔放在哪里。我相信这与k有关,但我不太确定

public void printTriangle(int n, int k){ 
    if(n < 0)
        return;
    if(n % 2 == 0) 
        n++;
    if(k == 0){
        System.out.println(makeLine(n, 'O'));
        printTriangle(n-2, 0); 
    } 
}
public void printTriangle(int n,int k){
if(n<0)
返回;
如果(n%2==0)
n++;
如果(k==0){
System.out.println(makeLine(n,'O'));
打印三角形(n-2,0);
} 
}

我有一个解决人们“家庭作业”的问题。我会解释这是如何帮助你学习的

下面是代码的工作原理

首先,像您所做的那样,您必须检查值n是否为奇数。如果是,则像您所拥有的那样增加值,使其均匀

现在你需要建立你的“三角形”。通过使用递归来实现这一点。对于三角形的每一行,您需要先打印空格,然后打印“O”,然后通过打印空格结束该行

在您的示例中,“X”表示空间,“O”表示三角形:

OOOOO
XOOOX
XXOXX
bOOO
bbO
此外,请看一个更大的例子:

OOOOOOOOO
XOOOOOOOX
XXOOOOOXX
XXXOOOXXX
XXXXOXXXX
如您所见,每次添加新行时,每侧都会添加一个额外的空间。因此,您可以使用“k”来打印空格。为每个递归执行向“k”添加1,将处理此问题。现在,您只需编辑
System.out.println()
语句,添加
makeLine
,以便绘制空格(或“X”)以及“O”

public void printTriangle(int n, int k){ 
    if(n <= 0)
        return;
    if(n % 2 == 0) 
        n++;
    System.out.println(makeLine(k, ' ') + makeLine(n, 'O') + makeLine(k, ' '));
    printTriangle(n-2, k+1); 
}
public void printTriangle(int n,int k){

如果(n我不会给你答案,但希望这能给你一些提示。递归方法是通过调用自己来解决同一问题的较小版本来解决问题的方法。在你的例子中,问题是打印这个(我把
b
放在空白处):

打印第一行,然后解决同一问题的较小版本,即打印较小的三角形:

OOOOO
XOOOX
XXOXX
bOOO
bbO

问题是这个较小的版本不太一样;它必须在每行之前有额外的空间。额外的空间是多少?这就是为什么讲师说“使用
k
对您有利”。你怎么能递归调用该方法,并使用
k
告诉它显示额外的空格?

对不起@Makoto,我的回答太仓促了,忘记了有时候人们需要理解为什么代码可以工作,就像让代码工作一样多,甚至更多。