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

使用堆栈的Hanoi Python解决方案的递归塔,python,algorithm,stack,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()

我试图用烟囱来解决河内塔的问题。这是我的密码:

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_堆栈的大小很小(比如<10)时,这种方法工作得非常好。但是当我在一个大小为100的Init_堆栈上运行这段代码时,程序花了很长时间才完成。你能告诉我为什么要花这么长时间吗?

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

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

您也可以使用递归进行求解 这需要时间,因为问题的复杂性是指数型的,需要大量的时间来解决


使用100个磁盘意味着您必须执行
2^100-1=1.27e30
移动。这可能对Python来说太多了?河内塔问题具有指数时间复杂性O(2^n),具体来说需要2^n-1步。这可能是这个样本的一个副本。如果样本不长,请将其包含在您的答案中。