【发布时间】:2015-10-08 08:28:06
【问题描述】:
我试图使用堆栈解决河内塔问题。这是我的代码:
Init_stack = [0,1,2,3]
Buffer_stack = []
Final_stack = []
n = len(Init_stack)
def move_disks(Init_stack, Buffer_stack, Final_stack, n):
if n == 0:
return
elif n == 1:
Final_stack.append(Init_stack.pop())
elif n == 2:
Buffer_stack.append(Init_stack.pop())
Final_stack.append(Init_stack.pop())
Final_stack.append(Buffer_stack.pop())
else:
move_disks(Init_stack, Final_stack, Buffer_stack, n-1)
Final_stack.append(Init_stack.pop())
move_disks(Buffer_stack, Init_stack, Final_stack,n-1)
当 Init_stack 的大小很小(例如
【问题讨论】:
-
使用 100 个磁盘意味着您必须进行
2^100 - 1 = 1.27e30移动。这对 Python 来说可能太多了? -
河内塔问题具有指数时间复杂度 O(2^n) 具体它需要 2^n - 1 次移动。这可能是 stackoverflow.com/questions/12383044/… 的副本