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

C++递归绘制正立等腰三角形:如何实现首行9空格的要求格式?

解决递归绘制等腰三角形的首行空格问题

你的代码核心递归逻辑是对的,但当前通过固定初始spaces=0累加的方式,无法满足首行9个空格的要求——因为初始空格数需要根据输入的底边长动态计算。这里提供两种简洁的调整方案:

方案一:直接计算每行空格数(推荐)

去掉spaces参数,直接根据当前行的baseLength计算需要的空格数。首行(baseLength=1)的空格数是9,每往下一行(baseLength增加2),空格数减少1,因此空格数公式为:9 - (baseLength - 1)/2。

修改后的代码:

#include <iostream>
using namespace std;

void DrawTriangle(int baseLength) {
    if (baseLength <= 0) {
        return;  
    }  
    // 先递归绘制上一行(*更少的行)
    DrawTriangle(baseLength - 2);
    
    // 计算当前行需要的空格数
    int spaces = 9 - (baseLength - 1) / 2;
    for(int i = 0; i < spaces; i++){
        cout << ' ';  
    }   
    for(int i = 0; i < baseLength; i++){
        cout << '*';  
    } 
    cout << endl;
}

// 调用示例
int main() {
    DrawTriangle(3);
    cout << endl;
    DrawTriangle(19);
    return 0;
}

方案二:使用辅助函数传递初始空格数

如果想保留原有的spaces参数传递逻辑,可以封装一个对外接口函数,计算正确的初始空格数后再调用递归函数:

#include <iostream>
using namespace std;

// 内部递归函数
void DrawTriangleHelper(int baseLength, int spaces) {
    if(baseLength <= 0){
        return;  
    }  
    DrawTriangleHelper(baseLength - 2, spaces + 1);
    for(int i = 0; i < spaces; i++){
        cout << ' ';  
    }   
    for(int i = 0; i < baseLength; i++){
        cout << '*';  
    } 
    cout << endl;
}

// 对外接口,计算初始空格数
void DrawTriangle(int baseLength) {
    // 初始空格数 = 9 - (底边长-1)/2
    int initialSpaces = 9 - (baseLength - 1) / 2;
    DrawTriangleHelper(baseLength, initialSpaces);
}

// 调用示例
int main() {
    DrawTriangle(3);
    cout << endl;
    DrawTriangle(19);
    return 0;
}

两种方案都能实现需求:首行第一个*前有9个空格,每行*数递增2个,底边长为奇数且小于20时输出正确的正立等腰三角形。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:00:32