浅析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的Lambda函数与排序
Oct 25 Python
Python实现的文本编辑器功能示例
Jun 30 Python
用Django实现一个可运行的区块链应用
Mar 08 Python
python实现电子产品商店
Feb 26 Python
详解python pandas 分组统计的方法
Jul 30 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
python绘制分布折线图的示例
Sep 24 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
python实现银行账户系统
Feb 22 Python
Python time库的时间时钟处理
May 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
php 404错误页面实现代码
2009/06/22 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
php实现json编码的方法
2015/07/30 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
详解Python中的from..import绝对导入语句
2016/06/21 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Python 移动光标位置的方法
2019/01/20 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
十佳党员事迹材料
2014/08/28 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
创业计划书之水果店
2019/07/18 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript