使用Stacks的Hanoi Python解决方案的递归塔

时间:2015-07-18 21:32:03

标签: python algorithm stack

我试图用堆栈来解决河内塔问题。这是我的代码:

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上运行此代码时,该程序需要很长时间才能完成。你能告诉我为什么需要这么长时间吗?

2 个答案:

答案 0 :(得分:1)

河内的塔需要(2^n)-1次移动,其中n是环的数量。即使是非常有效的解决方案也需要很长时间才能完成Python中的许多操作。

(2^10)-1等于1023(正如每位计算机科学家所知),但(2^100)-1是一个31位十进制数。

答案 1 :(得分:-1)

您也可以使用递归来解决

这需要时间,因为问题的复杂性是指数型的,需要很长的时间才能解决。

Click here for recursive code