汉诺塔的递归算法
2016-03-30 22:24
363 查看
汉诺塔是怎样通过递归算法实现的?
这个问题困扰了我一段时间,今天回过头来想想似乎明白了,因此在这里记录下自己想法。
首先贴上在Python上的代码:
为了完成这个任务,需要将此母任务分解为三个子任务:
1.把A上面的n-1个盘,移动到B上
2.把A”最下面的第n个盘移动到C上
3.把第一步中的n-1个盘从B移动到C上,任务完成。
第一个任务,是将n-1个盘移动到B上,通过代码:
这是告诉电脑,要一次一块,将A上的n-1个盘移动到B上,可以看成是一步完成的。
接着,将A中的第n个盘移到C上:
最后:
将B上的n-1个盘全部移到C上,完成任务。
这个问题困扰了我一段时间,今天回过头来想想似乎明白了,因此在这里记录下自己想法。
首先贴上在Python上的代码:
# -*- coding: utf-8 -*- def move(n,a,b,c): if n == 1: print(a+"-->"+c) if n > 1: move(n-1,a,c,b) print(a+"-->"+c) move(n-1,b,a,c) move(4,'A','B','C')
为了完成这个任务,需要将此母任务分解为三个子任务:
1.把A上面的n-1个盘,移动到B上
2.把A”最下面的第n个盘移动到C上
3.把第一步中的n-1个盘从B移动到C上,任务完成。
第一个任务,是将n-1个盘移动到B上,通过代码:
move(n-1,a,c,b)
这是告诉电脑,要一次一块,将A上的n-1个盘移动到B上,可以看成是一步完成的。
接着,将A中的第n个盘移到C上:
print(a+"-->"+c)
最后:
move(n-1,b,a,c)
将B上的n-1个盘全部移到C上,完成任务。
相关文章推荐
- PSP(3.23——3.29)以及周记录
- ASP.NET MVC下判断用户登录和授权的方法
- (String)将一个String里面的单词反转
- 分享一个进销存项目(多层架构)
- 笔记 - 9、HTML - XHTML
- 一个电网QT项目的开篇
- zabbix3.0监控安装
- 笔记 - 8、HTML - 表单
- Linux学习笔记6
- 图像缩放算法
- 数据库运维
- Centos7 平台中对于scikit安装教程的学习
- 调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment之我的解决方法
- Ubuntu 循环显示登录界面
- Python3 定向爬虫之“抓取糗事百科图片”
- hdu 1024 Max Sum Plus Plus
- [leetcode 173] Binary Search Tree Iterator-------为二叉搜索树实现迭代器功能
- Windows7下PHP5.6.19+Apache2.4.18+MySql5.7环境配置
- PHP 超文本预处理器
- 笔记 - 7、HTML - 内联(浮动)框架--iframe