我试图用堆栈解决河内塔的问题。这里是我的代码:使用堆栈的河内Python解决方案的递归塔
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的尺寸很小,比如< 10.但是,当我在一个大小为100 Init_stack运行这段代码,程序花了很长的时间才能完成。你能告诉我为什么需要这么长时间吗?
使用100个盘意味着你必须做'2^100 - 1 = 1.27e30'移动。对于Python来说这可能太多了? – Delgan
河内问题的塔有指数时间complexit O(2^n)具体它需要2^n - 1个移动。这可能是http://stackoverflow.com/questions/12383044/complexity-for-towers-of-hanoi的副本 –