浅析python递归函数和河内塔问题


Posted in Python onApril 18, 2017

关于递归函数:

函数内部调用自身的函数。

以n阶乘为例:

f(n) = n ! = 1 x 2 x 3 x 4 x...x(n-1)x(n) = n x (n-1) !

def factorial(n):
   if n==1:
     return 1
   return n * f(n-1)

//调用过程如下:

>>f(5)
>>5 * f(4)
>>5 * 4 * f(3)
>>5 * 4 * 3 * f(2)
>>5 * 4 * 3 * 2 * f(1)
>>5 * 4 * 3 * 2 * 1
>>120

从上面的例子可以直观得看到递归函数在不断的调用自己的函数,直到n==1(函数出口)。

关于河内塔:

规则:

1. 三根柱子,A,B, C

2. A 柱子上的盘子从小到大 排列,最上面的是最小的,最下面的是最大的。

3. 将A上的盘子移动到C上,移动过程中始终保持,最大的在下面,最小的在上面。

假设 A 柱子上有一个盘子,可以直接从A移动到C完成:

A --> C

假设 A 柱子上有两个盘子,需要借助B,移动到C:

A --> B

A --> C

B --> C

将A 最上面的盘(2-1)移动到B,然后将A中剩下一块盘移动到C,最后将B中的盘移动到C

假设 A 柱子上有三个盘子,需要借助B移动A 上面的两个盘,然后将A剩下最大的盘移动到C,最后将B中的盘移动到C。

A --> C

A --> B

C --> B  //这三步将A上前两个盘子移动到B

A --> C //这一步将A上最大的盘子移动到C

B --> A

B --> C

A --> C //后面这三步将B上的盘子移动到C

原理是将 A 上的(n-1) 块盘移动到B,然后A中剩下的,也是最大的一块盘移动到C,最后将B上(n-1)块盘移动到C。

def Hanoi(n , a, b, c):
  if n==1:
    print (" Hanoi Tower move", a, "-->", c)
    return
  Hanoi(n-1, a, c, b)
  Hanoi(1, a, b, c)
  Hanoi(n-1, b, a, c)
print (" When there is 1 ring on A")
Hanoi(1, 'A', 'B', 'C')
print (" When there are 2 rings on A")
Hanoi(2, 'A', 'B', 'C')
print (" When there are 3 rings on A")
Hanoi(3, 'A', 'B', 'C')
print(" When there are 4 rings on A")
Hanoi(4, 'A', 'B', 'C')

以上所述是小编给大家介绍的python递归函数和河内塔问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
给Python入门者的一些编程建议
Jun 15 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
使用python实现接口的方法
Jul 07 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
Python实现的建造者模式示例
Aug 06 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
python使用requests模块实现爬取电影天堂最新电影信息
Apr 03 Python
如何实现Django Rest framework版本控制
Jul 25 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python进程Multiprocessing模块原理解析
Feb 28 Python
python 串行执行和并行执行实例
Apr 30 Python
Python使用正则表达式实现文本替换的方法
Apr 18 #Python
Python外星人入侵游戏编程完整版
Mar 30 #Python
Python随机数用法实例详解【基于random模块】
Apr 18 #Python
django使用图片延时加载引起后台404错误
Apr 18 #Python
使用Python3制作TCP端口扫描器
Apr 17 #Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 #Python
Python的时间模块datetime详解
Apr 17 #Python
You might like
php设计模式 Builder(建造者模式)
2011/06/26 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
js form action动态修改方法
2008/11/04 Javascript
range 标准化之获取
2011/08/28 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Python Flask-web表单使用详解
2017/11/18 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
软件设计的目标是什么
2016/12/04 面试题
加拿大留学自荐信
2014/01/28 职场文书
技能竞赛活动方案
2014/02/21 职场文书
小学生优秀评语大全
2014/04/22 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
企业财务管理制度范本
2015/08/04 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
2016年五一促销广告语
2016/01/28 职场文书