浅析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使用MONGODB入门实例
May 11 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
Python实现单词翻译功能
Jun 06 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
python numpy实现文件存取的示例代码
May 26 Python
Python 硬币兑换问题
Jul 29 Python
python中pygame安装过程(超级详细)
Aug 04 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
Python中对列表排序实例
2015/01/04 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
Python Json数据文件操作原理解析
2020/05/09 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
python遍历路径破解表单的示例
2020/11/21 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
结婚邀请函范文
2014/01/14 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
Feign调用传输文件异常的解决
2021/06/24 Java/Android