浅析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的Django框架的视图中使用Session的方法
Jul 23 Python
python 编码规范整理
May 05 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
简单了解python单例模式的几种写法
Jul 01 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
python使用turtle库绘制奥运五环
Feb 24 Python
Python接口测试文件上传实例解析
May 22 Python
Python实现弹球小游戏
Aug 01 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 Python
用python对oracle进行简单性能测试
Dec 05 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 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会员找回密码功能的简单实现
2016/09/05 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
Node.js简单入门前传
2017/08/21 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
python基础教程项目三之万能的XML
2018/04/02 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
实习求职信
2013/12/01 职场文书
开水果连锁店创业计划书
2013/12/29 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android