浅析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 fabric实现远程部署
Jan 05 Python
使用python实现tcp自动重连
Jul 02 Python
python中模块查找的原理与方法详解
Aug 11 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
基于python神经卷积网络的人脸识别
May 24 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
Python如何使用input函数获取输入
Aug 06 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 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使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
vuex的简单使用教程
2018/02/02 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
Python中os和shutil模块实用方法集锦
2014/05/13 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
python去掉空白行的多种实现代码
2018/03/19 Python
python模块smtplib学习
2018/05/22 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
教师网络培训感言
2014/03/09 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL