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

带记忆化的递归汉诺塔(Towers of Hanoi)算法的空间复杂度是多少?

带记忆化递归汉诺塔的空间复杂度问题解答

1 普通无记忆化版本的空间复杂度纠正

你最初的猜测存在一个常见误区:普通无记忆化的递归汉诺塔空间复杂度不是O(2^(n-1)),实际是O(n):

  • 你提到的2^n -1是总递归调用次数,这个数值是对的,但空间复杂度统计的是程序运行过程中同时占用的最大内存,递归调用栈的内存只统计当前存活的栈帧:算法每次会先完整执行第一个n-1层的递归,等该递归完全返回释放栈帧后,才会执行磁盘移动,再执行第二个n-1层的递归。整个过程中调用栈的最大深度就是n,所以空间复杂度仅为O(n)。
  • 顺带说明:普通版本的时间复杂度为O(2^n),和总递归调用次数、总磁盘移动次数的量级一致。

2 你对记忆化的判断完全正确

汉诺塔递归不存在任何重复子问题,记忆化完全没有使用价值:

  • 每个递归调用的唯一标识是参数组合(n, source, mid, target),所有子问题的参数组合都是唯一的:比如将k个磁盘从A柱移到B柱,和将k个磁盘从A柱移到C柱,是完全不同的两个问题,没有任何可复用的重叠子问题结果,记忆化不会带来任何时间优化。

3 加记忆化后的空间复杂度确实会飙升

如果强行给递归加上记忆化缓存所有调用结果:

  • 总共有2^n -1个唯一的调用记录需要存储,这时候空间复杂度会从原来的O(n)直接升到O(2^n),属于完全没必要的负优化,所以该递归算法完全不需要使用记忆化。
def hanoi_tower_solution(n, source, mid, target):
    if n == 1:
        disk_move(source, target)
    else:
        hanoi_tower_solution(n-1, source, target, mid)
        disk_move(source, target)
        hanoi_tower_solution(n-1, mid, source, target)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:03