效果:
代码:
package Class.recursion;
public class Pyramid {
private int lines;
public Pyramid(int lines) {
this.lines = lines;
}
/*
lines = 5
1 i = 0 容量: 2*i-1 中间数: i+1 空格个数: 4 --> 5-(i+1)
1 2 1 i = 1 3
1 2 3 2 1 i = 2 2
1 2 3 4 3 2 1 i = 3 1
1 2 3 4 5 4 3 2 1 i = 4 0
*/
// 1. 前导空格和行数的关系,空格个数=5-(i+1)
// 2. 使用递归打印每一行(当前的行数, 当前的列数)
public void pt() {
// 每一行
for (int i = 0; i < lines; i++) {
// 空格
for (int j = 0; j < lines - i - 1; j++) {
System.out.print("\t");
}
// 每一行的递归调用
this.thisLine(i, 1);
System.out.println("");
}
}
// 从col=1开始
// 假设第三行, i = 2, col = 1
// 如果 col < i + 1 --> print(col) --> col++ --> 调用thisLine(int i, col)
// 直到 col == i + 1, 即col等于中间值, 打印col
// 随后向后递归结束, 逐渐往前递归, 打印出col, 即金字塔对称值
public void thisLine(int i, int col) {
if (col < i + 1) {
System.out.print(col + "\t");
// col++;
// thisLine(i, col);
// thisLine(i, ++col)
// 上面两种方法是从col=2开始递归的,导致每行尾部1无法打印出来且中间数打印两次
thisLine(i, col+1);
}
System.out.print(col + "\t");
}
}
class Main {
public static void main(String[] args) {
Pyramid pyramid = new Pyramid(5);
pyramid.pt();
}
}
版权声明:本文为qq_59524897原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。