神奇的递归

费了好大的劲才对递归算法有了点浅显的理解,在这与大家分享一下典型例子的代码。

九九乘法表

经典循环算法:

for i in range(1,10):for j in range(1,i+1):result = i * jprint("%s * %s = %s" %(j,i,result),end='\t')print()

递归算法实现:

def mul(i,j):if i >= 1:if j <= i:result = i * jprint("%s * %s = %s\t" %(j,i,result),end='')j += 1# 设置递归退出界限条件,这很重要if j > i:j = 1i -= 1print()mul(i,j)
if __name__ == "__main__":# 这里的输出会是倒序排列的,大家可以试一下修改传递的参数和判断条件来实现正序排列mul(9,1)

汉诺塔

还有一个理解递归算法的经典案例,汉诺塔,这里的代码参考FishC论坛的小甲鱼

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
其实算法非常简单。当盘子的个数为n时,移动的次数应等于2^n – 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;若n为奇数,按顺时针方向依次摆放 A C B。

def hanoi(n,x,y,z):if n == 1:print(x+str(n)+' ---> '+z+str(n))else:hanoi(n-1,x,z,y)    # 将前n-1个盘子从x移动到y上print(x+str(n)+' ---> '+z+str(n))   # 将最底下的最后一个盘子从x移动到z上hanoi(n-1,y,x,z)    # 将y上的n-1个盘子移动到z上n = int(input("Please input the number of Towers:"))
hanoi(n,"X","Y","Z")

以上是Python中的实现过程。

递归这个磨机的小妖精相关推荐

  1. REM,你这磨人的小妖精!

    前言 移动端的崛起,给了我们前端更大的舞台,与此同时,也给我们带来了一系列头疼的问题,移动端适配就是其中之一,目前市面上最常用的方案即是REM适配. 为什么说她是一个磨人的小妖精?因为她确实让人又爱又 ...

  2. 磨人的小妖精 别让我遇到你

    我叫颈椎病,今年有5000多岁了,我的子孙散布在世界各地,每当我看到人类颈背痛苦.上肢无力.手指发麻.下肢乏力.行走艰难.头晕.厌恶.吐逆,乃至视物含糊.心动过速及吞咽艰难的时候我都很开心.因为任何医 ...

  3. 「磨人的小妖精」JavaWeb如何学习?先肝了这套教程

    都说一入Java深似海,从此代码是爱人,但是学习的过程却从来都不轻松. 当下,越来越多的互联网企业,招聘Java工程师时,明确要求需熟练掌握JavaWeb技术.作为衔接前后端的重要一环,JavaWeb ...

  4. 你这磨人的小妖精——选中文本并标注的实现过程

    需求背景:给现有的页面加上标注解读功标注一段文本的功能:选中一段文字,在光标结束位置旁边弹出小tips,有一个按钮表示添加解读.添加了解读后,那段文字高亮(加上下划线).此后每次页面loaded,被加 ...

  5. theano 这磨人的小妖精

    Theano升级到1.0后,在import theano 时总会出现如下提醒,在没升级之前之前是没有的. >> import theano Using cuDNN version 5110 ...

  6. 聊聊「游戏」这个磨人的小妖精

    引言:此文是我的「读书会」里一份优秀作业,刘昊男同学作品.对于游戏,我记得之前看过「六原则」,不妨放在开头: 研究不熟悉的东西使之变为熟悉的东西: 将熟悉的东西作有规律的重复: 在重复的过程中尽可能作 ...

  7. 蜜糖?砒霜? 区块链真skr磨人小妖精!

    哪里有天才,我是把别人喝咖啡的工夫都用在工作上的.──鲁迅  中国软件网每日精选文集 "大家都在讨论区块链, 但我还是搞不懂它是什么, 和我又有什么关系." 今天各位"吃 ...

  8. 设置下载安装 桌面_小妖精美化app最新版下载-小妖精美化V5.3.9.800下载安装

    小妖精美化app是一款皮肤制作软件,在这里你可以随意自定义皮肤,同时还可以进行图片美化,当然也会有美图提供,例如精选壁纸.QQ名片背景图.恶搞隐藏图.文艺图片等等,多种图片类型在线提供,任你下载切换, ...

  9. 大端机,小端机;截断与提升

    什么是截断? 通俗一些来说,截断就是将一个长的整形变成一个短整形,在赋值时,长整形的数据中会有一部分没有空间存储,所以在短整形中只能存放低位的数据. 例如: char a = 1; 此时1本身是int ...

最新文章

  1. android获取屏幕尺寸、密度
  2. 今年阿里双十一CDN要冲历史之最,峰值带宽达到5000G+,来高手分析一下他们的CDN节点数量和规模...
  3. 蜻蜓FM涉嫌诈骗投资人和广告主源代码剖析
  4. DataLoader 与 Dataset
  5. win10 mysql 3534_win10 mysql 5.7.13 服务无法启动 3534
  6. boost::contract模块实现非成员函数的测试程序
  7. 修改input标签输入样式
  8. 高效数据序列化的工具 FlatBuffers 的初体验
  9. 矩阵计算的理论与方法_钢筋焊接网片实际重量与理论重量相差多少以及计算方法...
  10. 微信开源组件WCDB漫谈及Demo
  11. 通过mysqladmin监控MySQL数据的服务器状态
  12. 踩坑! spring事务,非事务方法与事务方法执行相互调用
  13. android 计算器边框,Android计算器——入门
  14. html遮罩层动画制作,《Flash遮罩层动画的制作》的教学反思
  15. windows电脑上一些软件如画图/记事本变成了英文
  16. 数据库入门_查询语句
  17. python画喜羊羊代码_PYTHON养成日记 DAY-7
  18. Python 面向对象解决跳马问题
  19. 解决各种中文乱码问题
  20. python setup_python--setUp()和tearDown()应用

热门文章

  1. 关于拯救者Y7000充不上电的问题
  2. 网络搜索热词排行接口
  3. 魔兽转服务器有什么影响,魔兽世界怀旧服频繁转服弊端出现:排队问题仍未解决 老服务器变成“鬼服”...
  4. [转载]Vue 2.x 实战之后台管理系统开发(一)
  5. VS Code新手常用的HTML模板
  6. 志不强者智不达,言不信者行不果
  7. typename关键字用法
  8. 数字货币交易所解决方案
  9. ubuntu安装PyCharm 把pycharm固定到快速启动栏
  10. 无法在别的计算机里显示u盘,为什么我的u盘某些一部分文件夹在一个电脑上能显示而在另一个电脑上不显示?...