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

Python汉诺塔递归函数中全局计数器计数异常问题求助

问题根因
  • 你对汉诺塔的计数时机判断错误:只有实际执行盘子移动操作的步骤才需要计数,对应代码中两条移动打印语句的位置,函数递归进入的动作不属于有效步骤,不应该触发计数器递增。
  • 原代码在else分支开头就执行了count += 1,这部分是多余计数:此时还没有执行任何移动操作,提前加1后,后续递归调用tower(n-1)的过程中还会持续修改全局count的值,等递归返回上层执行大盘移动的打印语句时,count已经被递归内部的操作修改过,就会出现序号重复、跳号的问题。
修正后的代码
count = 0

def tower(n, start, end, middle):
    global count
    if n == 1:
        count += 1
        print('%i - Coloque o disco %i do pino %s no pino %s' % (count, n, start, end))
    else:
        tower(n - 1, start, middle, end)
        # 仅在实际移动当前n号盘前计数
        count += 1
        print('%i - Coloque o disco %i do pino %s no pino %s' % (count, n, start, end))
        tower(n - 1, middle, end, start)

tower(5, 'A', 'C', 'B')
效果验证

修正后运行代码,输出序号会从1到31(n=5时总移动次数为2^5-1=31),不会出现重复、跳号问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:45:08