汉诺塔大家早就很熟悉了,今天重新学习一下是出于加深递归思想的目的,之前接触递归的时候老师都是以斐波那契数列或者阶乘、汉诺塔问题来说明讲解的,但是这样形式化的讲解却不见得真的能明白递归的思想,我就是一个例子,到现在做题的时候才意识到弄明白这个思想多重要,现在重新学习也希望为时不晚,好了不说这些了,下面是简单的实现:

#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:汉诺塔游戏
'''def hanoi_func(n,a,b,c):'''汉诺塔'''if n==1:move_func(1,a,c)else:hanoi_func(n-1,a,c,b)move_func(n,a,c)hanoi_func(n-1,b,a,c)def move_func(n,a,b):'''移动函数'''print 'id:{0} from {1} --------> {2}'.format(n,a,b)if __name__ == '__main__':hanoi_func(5,'X','Y','Z')

结果如下:

id:1 from X --------> Z
id:2 from X --------> Y
id:1 from Z --------> Y
id:3 from X --------> Z
id:1 from Y --------> X
id:2 from Y --------> Z
id:1 from X --------> Z
id:4 from X --------> Y
id:1 from Z --------> Y
id:2 from Z --------> X
id:1 from Y --------> X
id:3 from Z --------> Y
id:1 from X --------> Z
id:2 from X --------> Y
id:1 from Z --------> Y
id:5 from X --------> Z
id:1 from Y --------> X
id:2 from Y --------> Z
id:1 from X --------> Z
id:3 from Y --------> X
id:1 from Z --------> Y
id:2 from Z --------> X
id:1 from Y --------> X
id:4 from Y --------> Z
id:1 from X --------> Z
id:2 from X --------> Y
id:1 from Z --------> Y
id:3 from X --------> Z
id:1 from Y --------> X
id:2 from Y --------> Z
id:1 from X --------> Z
[Finished in 0.3s]

递归学习简单的小例子之hanoi塔问题相关推荐

  1. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

  2. Q-learning学习的一个小例子

    强化学习的难点,在于其引入了时间这个维度,不管是有监督还是无监督学习,都是能获得即使反馈,但到了强化学习中,反馈来的没那么及时.在周志华的<机器学习>中,举过一个种西瓜的例子.种瓜有很多步 ...

  3. 决策树分析例题经典案例_决策树原理及一个简单的小例子

    首先通过两个图来引入什么是决策树. 是否学习的决策过程 决策树是仿树结构来进行决策的,例如上图来说,我们要对'是否学习'这个问题进行决策时,通常伴随一系列的子决策.先看是否有'对象',有的话是否需要' ...

  4. 递归回溯最简单易懂的小例子

    这是我看刚刚看的剑指offer上的一道面试题:用递归实现链表从后往前输出(c或c++), 我突然想用java试试,然后就有了这样一个小算法题: 任意一个一维数组,用递归实现从右往昨打印输出,下标从0开 ...

  5. CALayer 一些简单的小例子

    //设定calayer     self.view.layer.backgroundColor=[UIColor orangeColor].CGColor;     self.view.layer.c ...

  6. 机器视觉-简单入门小例子

    *读入图像 read_image (Image, 'fabrik') *获取图像大小 get_image_size (Image, Width, Height) *设置窗口大小 dev_open_wi ...

  7. cocos2d-x 3.0学习游戏笔记的例子《卡塔防》第五步---开始建立游戏界面

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...

  8. JointJS简单小例子

    JointJS是一个HTML5的JavaScript库,用于创建完全互动式的图表,它极易上手且操作简单,并且支持所有的现代浏览器,对于时间紧迫的我们非常有利.我们可以使用JointJS已提供的图元素绘 ...

  9. 在Eclipse中写第一个hibernate小例子

    在hibernate自带的文档中,包含了一个很简单的小例子,不过这个小例子是基于ant的,而且说的不是很详细,不利于新手学习.在这里,我将在Eclipse中实现这个例子,并给出详细的实现步骤.     ...

  10. spring mvc和rest风格小例子

    之前在新一个项目中用了spring3 的mvc开发,用得很爽,不过当时想找些入门的小例子时,找了好久也没找到, 现在写个简单的小例子出来给初学者学习下. srping3也支持rest,所以例子也包括这 ...

最新文章

  1. 一些有趣的题目(java)持续更新
  2. VM 7 下ubuntu安装vmtools
  3. mysql数据库---授权语句以及备份
  4. BlockChain:区块链/加密数字货币落地技术应用高质量相关文章
  5. C语言游戏传递小秘密,C语言的那些小秘密之链表
  6. tidb数据库_异构数据库复制到TiDB
  7. oracle卸数什么是ctrl文件,Oracle数据库的安装和卸载之道
  8. linux修改文件句柄数生效_linux系统层面调优和常见的面试题
  9. php设置文件权限问题,php以fastCGI的方式运行时文件系统权限问题及解决方法
  10. azure云数据库_如何使用Cloud Shell创建Azure SQL数据库
  11. CCF201503-1 图像旋转(100分)【数学计算】
  12. XPath解析网页学习笔记
  13. 怎样设置rotacast插件_老照片修复工具,降噪插件
  14. 2021-10-24 #1024 程序员的节日
  15. python如何调整word表格宽度_python-docx编辑word表格
  16. java定时器每月月末自动执行
  17. unity3d/用户自由改变背景色
  18. c51中的intrins.h库函数
  19. [附源码]Python计算机毕业设计服装销售商城系统
  20. 「聚变」前端 客户端,第十七届 D2 终端技术大会来了!

热门文章

  1. 自由测试人Jarod的一天
  2. git 的sshkeys生成方法以及上传代码鱼git
  3. Spring MVC AOP 初步学习
  4. linux下find命令-atime,-ctime,-mtime真正含义
  5. Android开发:setAlpha()方法
  6. 11. 判断是给属性前加typeof 可以同时判断属性是否存在
  7. java基础-对象-练习集锦
  8. Android Studio运行程序出现Session ‘app’: Error Launching activity 解决办法
  9. C# 5.0 CallerMemberName CallerFilePath CallerLineNumber获取调用方法名称,路径,行号
  10. HTML/CCS初学的小小收获(大虾表鄙视小白)(1)