我试图用堆栈来解决河内塔问题。这是我的代码:
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上运行此代码时,该程序需要很长时间才能完成。你能告诉我为什么需要这么长时间吗?
答案 0 :(得分:1)
河内的塔需要(2^n)-1
次移动,其中n是环的数量。即使是非常有效的解决方案也需要很长时间才能完成Python中的许多操作。
(2^10)-1
等于1023(正如每位计算机科学家所知),但(2^100)-1
是一个31位十进制数。
答案 1 :(得分:-1)