浅析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项目发布为exe可执行程序过程分享
Oct 23 Python
python统计cpu利用率的方法
Jun 02 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
浅谈python 中类属性共享的问题
Jul 02 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Django 返回json数据的实现示例
Mar 05 Python
Python pip使用超时问题解决方案
Aug 03 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 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
加速XP搜索功能堪比vista
2007/03/22 PHP
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
理解javascript异步编程
2016/01/27 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
Keras设置以及获取权重的实现
2020/06/19 Python
用python对oracle进行简单性能测试
2020/12/05 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
耐克亚太地区:Nike APAC
2019/12/07 全球购物
护士自荐信范文
2013/12/15 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
法律顾问服务方案
2014/05/15 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
护林员个人总结
2015/03/04 职场文书
新闻通讯稿范文
2015/07/22 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
一年级下册数学教学反思
2016/02/16 职场文书