浅析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中你应该知道的一些内置函数
Mar 31 Python
运动检测ViBe算法python实现代码
Jan 09 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
详解用python计算阶乘的几种方法
Aug 14 Python
python的命名规则知识点总结
Oct 04 Python
Python 列表的清空方式
Jan 13 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
python新手学习可变和不可变对象
Jun 11 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 购物车的例子
2009/05/04 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
详解JavaScript的变量
2019/04/04 Javascript
python实现图片变亮或者变暗的方法
2015/06/01 Python
python实现中文分词FMM算法实例
2015/07/10 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
写给女生的道歉信
2014/01/08 职场文书
员工考核管理制度
2014/02/02 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
2015年中秋寄语
2015/07/31 职场文书
导游词之凤凰古城
2019/10/22 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技