浅析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 相关文章推荐
在windows下快速搭建web.py开发框架方法
Apr 22 Python
谈谈python中GUI的选择
Mar 01 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
详解python 模拟豆瓣登录(豆瓣6.0)
Apr 18 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
python函数定义和调用过程详解
Feb 09 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
python2.7使用scapy发送syn实例
May 05 Python
Python3的进程和线程你了解吗
Mar 16 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
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
Vue 实例事件简单示例
2019/09/19 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
Python构建图像分类识别器的方法
2019/01/12 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Django工程的分层结构详解
2019/07/18 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
东方通信股份有限公司VC面试题
2014/08/27 面试题
Ado与Ado.net的相同与不同
2014/12/08 面试题
业务经理岗位职责
2013/11/11 职场文书
大学生的网上创业计划书
2013/12/31 职场文书
图书室管理制度
2014/01/19 职场文书
2015年商场工作总结
2015/04/27 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书