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

递归生成钻石序列时,如何设置正确的前置空格数?

解决递归钻石序列居中问题的思路与修正代码

问题根源分析

你的代码核心问题在于递归层级的前置空格控制逻辑错误:当前仅在递归调用前后打印单个空格,但实际上每一层n-1的钻石需要整体向右偏移n-1个空格(相对于n级钻石的位置),而非逐行加1个空格。同时,单个钻石内部的行偏移计算没有结合整体图案的最大宽度,导致无法全局居中。

具体解决思路

  1. 确定全局基准宽度:对于输入n,整个图案的最大宽度为2*n -1(最宽行的星号数量),所有行的前置空格都要以此为基准计算,保证全局居中。
  2. 新增偏移量参数:给递归函数添加offset参数,用来控制当前层级钻石的整体前置空格数。初始调用时offset为0,递归到n-1时offset加1(因为子钻石要比父钻石右移1位)。
  3. 拆分打印逻辑:将「打印单个钻石」和「递归嵌套钻石」的逻辑分离,避免混合导致的空格计算混乱。

修正后的代码

#include <iostream>

using namespace std;

// 打印单个size大小的钻石,整体前置offset个空格
void print_single_diamond(int size, int offset) {
    int max_width = 2 * size - 1;
    // 打印上半部分(包括中间行)
    for (int i = 1; i <= size; ++i) {
        // 打印整体偏移空格
        for (int j = 0; j < offset; ++j) {
            cout << ' ';
        }
        // 打印当前行的居中空格
        int spaces = (max_width - (2 * i - 1)) / 2;
        for (int j = 0; j < spaces; ++j) {
            cout << ' ';
        }
        // 打印星号
        for (int j = 0; j < 2 * i - 1; ++j) {
            cout << '*';
        }
        cout << endl;
    }
    // 打印下半部分
    for (int i = size - 1; i >= 1; --i) {
        for (int j = 0; j < offset; ++j) {
            cout << ' ';
        }
        int spaces = (max_width - (2 * i - 1)) / 2;
        for (int j = 0; j < spaces; ++j) {
            cout << ' ';
        }
        for (int j = 0; j < 2 * i - 1; ++j) {
            cout << '*';
        }
        cout << endl;
    }
}

// 递归生成嵌套钻石序列
void diamonds(int n, int offset) {
    if (n == 1) {
        print_single_diamond(1, offset);
        return;
    }
    // 先打印n-1的钻石,偏移量+1
    diamonds(n - 1, offset + 1);
    // 打印当前n的钻石
    print_single_diamond(n, offset);
    // 再打印n-1的钻石,偏移量+1
    diamonds(n - 1, offset + 1);
}

int main() {
    int n;
    cin >> n;
    diamonds(n, 0);
    return 0;
}

代码说明

  • print_single_diamond函数负责打印单个独立钻石:先打印整体偏移的offset个空格,再计算当前行需要的居中空格(基于全局最大宽度),最后打印星号。
  • diamonds函数专注递归逻辑:递归调用n-1时传递offset+1,确保子钻石整体右移一位,符合题目要求的嵌套结构。
  • 所有行的空格计算都基于全局最大宽度,保证整个图案完美居中。

内容的提问来源于stack exchange,提问作者Maison Mihara Sneakers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:57:42