浅析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 08 Python
python实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
python爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
Python日志模块logging简介
Apr 13 Python
python字符串对其居中显示的方法
Jul 11 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 Python
python numpy 按行归一化的实例
Jan 21 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
django配置app中的静态文件步骤
Mar 27 Python
selenium自动化测试入门实战
Dec 21 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
Vue插件打包与发布的方法示例
2018/08/20 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
Python版中国省市经纬度
2020/02/11 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
Python读写Excel表格的方法
2021/03/02 Python
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
质检员的岗位职责
2013/11/15 职场文书
企业党员公开承诺书
2014/03/26 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
党员民主生活会材料
2014/12/15 职场文书
继承公证书格式
2015/01/26 职场文书
同意报考证明
2015/06/17 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
MySQL 如何设计统计数据表
2021/06/15 MySQL
用Python生成会跳舞的美女
2022/01/18 Python