You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用递归在Java中实现数字金字塔图案(1 222 33333...)

嘿,我来帮你解决这两个数字金字塔的问题!

问题1:如何用数字制作金字塔图案?

数字金字塔的核心特点是:

  • 第n行的数字个数是 2*n - 1(比如第1行1个,第2行3个,第3行5个,以此类推)
  • 整体要居中显示,所以每行开头需要打印「总层数 - 当前行号」个空格

给你一个Java非递归的实现例子,方便你理解基础逻辑:

public class NumberPyramid {
    public static void main(String[] args) {
        int totalRows = 5; // 金字塔的总层数
        
        for (int row = 1; row <= totalRows; row++) {
            // 打印前置空格,实现居中
            for (int space = 1; space <= totalRows - row; space++) {
                System.out.print(" ");
            }
            
            // 打印当前行的数字
            for (int num = 1; num <= 2*row - 1; num++) {
                System.out.print(row);
            }
            
            // 换行进入下一行
            System.out.println();
        }
    }
}

运行这个代码,你会得到这样的输出:

1
   222
  33333
 4444444
555555555
问题2:修正递归实现的金字塔图案

我看了你的递归代码,问题主要出在两个地方:

  1. 你控制每行打印row个数字,但我们需要的是2*row -1个
  2. 空格的判断逻辑有点偏差,导致居中效果不对

下面是修正后的递归代码,我会标注关键修改点:

public class RecursivePyramid {
    static void recursion(int row, int k, int j, int c) {
        if (row > c) {
            return;
        } else {
            // 修改点1:判断是否打印完当前行需要的数字(2*row-1个)
            if (k == 2 * row - 1) {
                System.out.println();
                recursion(++row, 0, 0, c);
            } 
            // 修改点2:空格数是c - row,打印到j等于这个数就停止
            else if (j < c - row) {
                System.out.print(" ");
                recursion(row, k, ++j, c);
            } else {
                System.out.print(row);
                recursion(row, ++k, j, c);
            }
        }
    }

    public static void main(String[] args) {
        recursion(1, 0, 0, 5); // 调用递归,总层数设为5
    }
}

代码逻辑解释:

  • 递归的终止条件还是row > c,当所有行都打印完就退出
  • 空格打印:第row行需要c - row个前置空格,所以当j小于这个数时,持续打印空格
  • 数字打印:每行需要打印2*row -1个当前行号,所以当k计数到这个数时,换行并进入下一行的递归

运行修正后的代码,就能得到你想要的1 222 33333...这样的金字塔啦!

内容的提问来源于stack exchange,提问作者Abbas Yansaban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:12:41