Python递归实现汉诺塔算法示例
时间:2019-04-13
本文章向大家介绍Python递归实现汉诺塔算法示例,主要包括Python递归实现汉诺塔算法示例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了Python递归实现汉诺塔算法。分享给大家供大家参考,具体如下:
最近面试题,面试官让我5分钟实现汉诺塔算法(已然忘记汉诺塔是啥)。
痛定思痛,回来查了一下汉诺塔的题目和算法。题干与实现如下:
A基座有64个盘子,大在下小在上,每次移动一个盘子,每次都需要大在下小在上,全部移动到B基座,C基座为辅助基座。
# -*- coding:utf-8 -*- # 汉诺塔回溯递归实现 # 假设参数中初始杆为a,借助杆为c,阶段终止杆为b # 第一步,a状态借助b移动到c # 第二步,a移动到b # 第三步,c借助a移动到b class Solution: def hanoi(self, n, a, b, c): global lishan if n > 0: Solution.hanoi(self, n-1, a, c, b) b.append(lishan[n-1]) a.remove(lishan[n-1]) Solution.hanoi(self, n-1, c, b, a) so = Solution() n = 3 global lishan lishan = [x for x in xrange(n)] A = [x for x in xrange(n)] B = [] C = [] so.hanoi(3, A, B, C)print B
运行结果:
[2, 1, 0]
回溯递归,设计起来还是很有难度的(在没有背过这个题目的前提下)
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
- 自制分布式漏洞扫描工具
- [细节剖析]X Windows中一个22年的漏洞
- android 游戏移植 (二) | SDL2.0适配 西游释厄传
- Android调用系统相册和拍照的Demo
- 黑客是如何通过RDP远程桌面服务进行攻击的
- SDL的几个宽高概念讲解(文中有福利)
- [安全科普]你必须了解的session的本质
- Android中如何动态的实现设置全屏和退出全屏
- Android 双进程Service常驻后台,无惧“一键清理”
- Android之捕获TextView超链接
- 自封装Android软键盘工具类ImeUtil
- XSS挑战第一期Writeup
- 安全公司新星Aorato推出“行为防火墙”
- 倍数提高工作效率的 Android Studio 奇技
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL 索引
- notepad++ 配置c++及运行
- Leetcode 687. 最长同值路径
- Leetcode 1071. 字符串的最大公因子
- PAT (Advanced Level) Practice 1146 Topological Order (25分)
- 【风险预警】RPCBind服务被利用进行UDP反射DDoS攻击
- MySQL DDL 操作
- Leetcode 169 多数元素
- Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) B. Cards Sorting 树状数组+技巧
- MySQL DML 操作
- select 查询基础
- 带大家体验一下删库跑路,不是虚拟机,是真的服务器哦!
- 数据库压力测试方法概述
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) B. Bash's Big Day (Hash+简单数论)
- 随机点名系统——html初学实战