admin管理员组文章数量:1794759
汉诺塔问题(Python实现)
前言 1.先谈一下什么是递归?
我自己的理解就是:将自身的问题不断减小规模,直到减小到无法减小为止。(到达递归结束条件)然后从小问题开始解决,小问题逐个解决之后,大问题也就迎刃而解了(递归回来了)
2.简而言之就是:原问题不断减小为规模更小的原问题,然后小规模的原问题解决了,从而解决原来的大问题!
3.过程为:减小规模、从小解决、递归回来、解决原问题!!!
4.递归的关键是:(1)有递归结束条件。 (2)不断调用自身,减小问题规模,向递归结束条件靠拢。
汉诺塔问题 1.问题描述有三根柱子,分别名为A,B,C。初始时,在柱子A上有n个圆盘,他们从下到上,盘子的大小是从大到小。在移动和摆放的过程中,小盘子必须在大盘子上面。 在保证规则的情况下,将柱子A上的所有盘子,移动到柱子C,移动中可以借助柱子B,但是得保证移动过程中小盘子必须得在大盘子上!!! 请打印出移动过程?
2.问题分析 递归的过程:(1)将最上面的n-1个盘子,从A借助C移动到B (2)将最下面的一个盘子,从A移动到C (3)将最上面的n-1个盘子,从B借助A移动到C
递归的结束条件:问题规模变成盘子数为0时,因为当盘子数为0时就不需要移动了!!!
3.代码(Python) # coding:utf-8 """ n为初始时A柱上的盘子数 a为起始盘子所在的柱子 b为中转柱子 c为目的地柱子 """ def hanoi(n, a, b, c): if n > 0: hanoi(n-1, a, c, b) print("盘子从%s移动到%s" % (a, c)) hanoi(n-1, b, a, c) hanoi(3, "A", "B", "C") 4.结果展示 完结,撒花撒花…版权声明:本文标题:汉诺塔问题(Python实现) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1687043337a130018.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论