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

相同逻辑的drawPyramid_recursive递归函数在C和Python中输出不同的原因

问题原因说明

你遇到的输出差异和C、Python的递归调用栈实现无关,二者的调用栈逻辑都是遵循后进先出的标准规则,差异完全来自两段代码的逻辑错误:

C代码问题

你贴出的C代码中return drawPyramid_recursive(height, level - 1);这行多写了return关键字,按照这段代码的逻辑,递归调用后直接返回,后面的所有打印代码永远不会被执行,正常运行不会有任何输出,你给出的C输出应该是手动删掉这行多余return之后的运行结果。

Python代码问题

你的Python代码和修正return后的C代码逻辑完全不一致,存在两个错误:

  1. 打印部分多加了一层for level in range(1, height + 1)的循环:C版本递归返回后只会打印当前level对应的一层金字塔,而你这段Python代码每次递归返回后都会循环打印从1到height的所有层,也就是一整个完整金字塔。
  2. 额外循环的变量名直接用了level,覆盖了函数传入的level参数,就算删掉外层多余循环也会出现逻辑错误。

Python输出异常的原因

当输入height=3时,初始调用level=3,会依次递归调用level=2、level=1,直到level=0触发基线条件返回:

  • 首先回到level=1的执行上下文,执行打印代码输出一整个3层金字塔
  • 再回到level=2的执行上下文,执行打印代码输出第二个完整3层金字塔
  • 最后回到level=3的执行上下文,执行打印代码输出第三个完整3层金字塔
    刚好和你给出的Python输出完全吻合。
修正后的Python代码

删掉外层多余的循环,直接用传入的level参数打印当前层即可:

def drawPyramid_recursive(height, level):
    if level == 0:  # base case
        return
    drawPyramid_recursive(height, level - 1)
    
    for column in range(height - level, 0, -1):
        print(" ", end="")
    for column in range(1, level + 1):
        print("#", end="")
    print("  ", end="")
    for column in range(1, level + 1):
        print("#", end="")
    print()

运行后输出和修正后的C代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:18:00