有人可以解释这种图案打印方法中的递归逻辑吗?
Can someone explain the logic of recursion in this pattern printing method?
我正在尝试拼凑此示例中的逻辑。这是正常的代码。仅供参考,我有一位大学导师帮助我完成了这个例子,但他仍在试图弄清楚如何向我解释它。代码也搞定了,这只是为了我自己的递归知识。
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 方法,并且随着打印 stars
而不断增加
嗯,
printTriangle(5) 调用 printTriangle(4)
printTriangle(4) 调用 printTriangle(3)
printTriangle(3) 调用 printTriangle(2)
printTriangle(2) 调用 printTriangle(1)
printTriangle(1) 调用 printTriangle(0)
printTriangle(0) 什么都不做,但是 returns 到 printTriangle(1)
printTriangle(1) 继续调用 printStars(1)
printStars(1) 打印一个星星并调用 printStars(0)
printStars(0) 什么也不做,returns 到 printStars(1)
printStars(1) 与 printTriangle(1)
无关,returns
printTriangle(1) 打印换行符和 returns 到 printTriangle(2)
printTriangle(2) 继续调用 printStars(2)
printStars(2) 打印一个星星并调用 printStars(1)
printStars(1) 打印一个星星并调用 printStars(0)
printStars(0) 什么也不做,returns 到 printStars(1)
printStars(1) 与 printStars(2)
无事可做 returns
printStars(2) 与 printTriangle(2)
无关,returns
printTriangle(2) 打印换行符和 returns 到 printTriangle(3)
...
我希望通过提供书面和视觉解释来回答您的问题:
书面:
首先我们从 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 星。
视觉表示:
我希望这有助于回答您的问题!如果您需要进一步的说明或详细信息,请告诉我:)
我正在尝试拼凑此示例中的逻辑。这是正常的代码。仅供参考,我有一位大学导师帮助我完成了这个例子,但他仍在试图弄清楚如何向我解释它。代码也搞定了,这只是为了我自己的递归知识。
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 方法,并且随着打印 stars
而不断增加嗯,
printTriangle(5) 调用 printTriangle(4)
printTriangle(4) 调用 printTriangle(3)
printTriangle(3) 调用 printTriangle(2)
printTriangle(2) 调用 printTriangle(1)
printTriangle(1) 调用 printTriangle(0)
printTriangle(0) 什么都不做,但是 returns 到 printTriangle(1)
printTriangle(1) 继续调用 printStars(1)
printStars(1) 打印一个星星并调用 printStars(0)
printStars(0) 什么也不做,returns 到 printStars(1)
printStars(1) 与 printTriangle(1)
无关,returns
printTriangle(1) 打印换行符和 returns 到 printTriangle(2)
printTriangle(2) 继续调用 printStars(2)
printStars(2) 打印一个星星并调用 printStars(1)
printStars(1) 打印一个星星并调用 printStars(0)
printStars(0) 什么也不做,returns 到 printStars(1)
printStars(1) 与 printStars(2)
无事可做 returns
printStars(2) 与 printTriangle(2)
无关,returns
printTriangle(2) 打印换行符和 returns 到 printTriangle(3)
...
我希望通过提供书面和视觉解释来回答您的问题:
书面:
首先我们从 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 星。
视觉表示:
我希望这有助于回答您的问题!如果您需要进一步的说明或详细信息,请告诉我:)