美文网首页
递归:汉诺塔问题(简单)

递归:汉诺塔问题(简单)

作者: 言的希 | 来源:发表于2021-04-09 11:23 被阅读0次

    在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:

    (1) 每次只能移动一个盘子;

    (2) 盘子只能从柱子顶端滑出移到下一根柱子;

    (3) 盘子只能叠在比它大的盘子上。

    请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。

    你需要原地修改栈。

示例1:  输入:A = [2, 1, 0], B = [], C = []

            输出:C = [2, 1, 0]

解题思路:递归问题,可看成一共就三步:1.把 n-1 号盘子移动到缓冲区;2.把1号从起点移到终点;3.然后把缓冲区的n-1号盘子也移到终点。

class Solution:

    def hanota(self, A: List[int], B: List[int], C: List[int]) -> None:

        n = len(A)

        self.move(n, A, B, C)

    def move(self, n, A, B, C):

        if (n == 1) :

            C.append(A[-1])

            A.pop()

            return

        self.move(n-1, A, C, B)  #1.把 n-1 号盘子移动到缓冲区

        C.append(A[-1])

        A.pop() # 2.把1号从起点移到终点

        self.move(n-1, B, A, C)  # 3.然后把缓冲区的n-1号盘子也移到终点

相关文章

  • 数据结构算法之递归和栈结构

    递归 程序调用自身的编程技巧称为递归简单案例:n的阶乘 汉诺塔 汉诺塔问题描述:3个柱为a、b、c,圆盘最初在a柱...

  • 递归:汉诺塔问题(简单)

    在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而...

  • 数据结构与算法-递归分治-汉诺塔思想

    折半查找算法的递归实现 思想:减少查找序列的长度,分而治之地进行关键字的查找 汉诺塔问题 汉诺塔是我们递归思想,分...

  • Python 汉诺塔的实现

    汉诺塔的实现,是一个典型的递归问题,当然越是复杂的递归问题越是考验人的抽象思维; 哈哈哈,言归正传,汉诺塔问题如下...

  • 汉诺塔递归

    学习汉诺塔递归算法

  • Python3 趣味系列题4 ------非递归解决

      人们通常利用递归的方法求解汉诺塔问题。递归程序的实现比较简单,但是难于理解。下面给出python3的递归程序:...

  • python例子

    利用递归函数移动汉诺塔

  • 递归——汉诺塔问题

    我参考了两位大佬的代码,其中一位是日本的专业程序员。比较有意思的是他出的面向要考试的群体的那本书讲了这个,后来大概...

  • 复杂递归问题:汉诺塔

    复杂递归问题:汉诺塔 汉诺塔问题是法国数学家Edouard Lucas于1883年, 根据传说提出来的。 传说在一...

  • 算法分析与设计

    递归汉诺塔问题: https://blog.csdn.net/xb2355404/article/details/...

网友评论

      本文标题:递归:汉诺塔问题(简单)

      本文链接:https://www.haomeiwen.com/subject/vcsikltx.html