要点:函数定义中调用函数自身的方式形成递归。

递归的定义:递归,就是在运行的过程中调用自己。

数学上有个经典的递归例子叫阶乘,阶乘通常定义如下:
n! = n(n-1)(n-2)…(1)
为了算出这个阶乘,可以通过一个简单的循环累积去计算阶乘。n! = n(n-1)!

阶乘的例子揭示了递归的两个关键特征。
  1. 存在一个或多个基例,基例不需要再次递归,它是确定的表达式。
  2. 所有递归链要以一个或多个基例结尾。

以计算阶乘为例,可以把阶乘写成一个单独的函数。

def fact(n):if n == 0:return 1else:return n * fact(n-1)
num = eval(input('请输入一个整数:'))
print(fact(abs(int(num))))

下面通过一个实例来帮助大家加深理解。

汉诺塔是学习计算机递归算法的经典入门案例,该案例来源于真实故事。在世界某个地方有一个很虔诚的宗教组织,其中僧侣维护着一项神圣任务:保持宇宙的时间。在时间的最开始,僧侣在平台上竖立了3个垂直杆,在最左侧杆上有64个不同半径的金色同心圆盘,直径较大的圆盘堆放在下方,形成了金字塔样子的整体外观。僧侣们的任务是将所有圆盘从最左侧杆子移动到最右侧杆子上,这个宗教认为当僧侣们完成任务的时候,万事万物将会化为乌有,宇宙将结束。为了保持神圣的顺序,僧侣们移动圆盘需要遵从特定的规则:一次只能移动一个盘子、盘子只能在3个标杆之间移动、更大的盘子不能放在更小的盘子上面。其中,3个标杆分别用A、B、C表示。

汉诺塔是一个数学难题,其问题描述为如何将所有圆盘从A移动到C。请用Python编写一个汉诺塔的移动函数,采用递归方法解决这个难题,要求输入汉诺塔的层数,输出整个移动流程。

count = 0
def hanoi(n,src,dst,mid):global countif n == 1:print('{}:{}->{}'.format(1,src,dst))count += 1else:hanoi(n-1,src,mid,dst)print('{}:{}->{}'.format(n,src,dst))count += 1hanoi(n-1,mid,dst,src)
hanoi(3,'a','c','b')
print(count)

算法:递归(汉诺塔)相关推荐

  1. 程序设计与算法----递归汉诺塔问题

    汉诺塔 古代有一个梵塔,塔内有三个座A,B,C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘子从A座移动到C座,但每次只能允许移动一个盘子,并且在移动的过程中 ...

  2. 算法--递归--汉诺塔问题

    文章目录 1. 问题分析 2. 面试题 1. 问题分析 游戏规则:一次只能挪一片:小的只能在大的上面:把所有的从A柱挪到C柱. 递推公式: 上部 n - 1 个 A 到 B: 最底下 1 个 A 到 ...

  3. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  4. python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...

    多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...

  5. 经典算法之汉诺塔求解问题

    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64 ...

  6. python函数递归 汉诺塔

    4.7 python函数递归 汉诺塔 代码: def hanno(n,A,B,C):global stepif n==1:print('{}->{}'.format(A,C))step +=1e ...

  7. 用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)

    汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 要求:1)大的盘在下面,小的盘在上面 2)一次只能移动一个盘子 个人思路:先 ...

  8. 用python递归的算法解决汉诺塔问题

    关于递归的四条基准法则 基准情形: 必须由某些基准情形,它无需递归就能解出 不断推进: 对于那些需要递归的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进 设计法则: 假设所有的递归调 ...

  9. python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解

    汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...

  10. 汉诺塔算法python_经典算法:汉诺塔

    学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔.算是算法的入门小题目之一吧~ 视频教程 什么是汉诺塔? 我这里直接拉来一个图解释一下(挂了请联系我) 就是这么一个东西 ...

最新文章

  1. LeetCode刷题记录13——705. Design HashSet(easy)
  2. 新代系统9服务器警报,新代系统OP、MOT警报一览表
  3. 成功解决TypeError: ‘tuple‘ object is not callable
  4. union all动态表_Excel VBA——动态显示图表
  5. 计算机管理系统绪论,数据库系统概论 第一章 绪论
  6. LINQ to SQL的不足
  7. pythotn基础篇——条件分支与循环--3
  8. 阶段3 3.SpringMVC·_06.异常处理及拦截器_2 SpringMVC异常处理之演示程序异常
  9. eova1.4版本下拉框没有滚动条
  10. 磁盘管理高级进阶-LVM逻辑卷管理
  11. 抖音运营详细教程,算法解读、平台规则、热门涨粉......丨国仁网络
  12. HTML5前端期末大作业 HTML+CSS+JavaScript防锤子手机商城官网 web前端网页设计实例 企业网站制作
  13. 互联网技术-alibaba-gateway网关中routers路由匹配规则
  14. MOS管的导通过程及损耗分析
  15. web安全—万能密码登录(跳过密码验证)
  16. Spring Security安全框架
  17. PyQt5:ToggleButton开关按钮(24)
  18. [附源码]java毕业设计学生互评的在线作业管理系统
  19. dagger2 android封装,Dagger2 Android应用:@Component和@Module
  20. 如何将Blender模型导入Panda3d

热门文章

  1. ant安装配置问题:ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
  2. postinvalidate、postinvalidateOnAnimation和invalidate的区别
  3. php GD库做水印功能,合并图片
  4. ChatGPT会对未来5年的NLP算法从业者带来怎样的冲击?
  5. 快手安全 X 墨菲安全 | 软件供应链安全解决方案完整分享
  6. shell 字符串匹配
  7. python爬取boss直聘招聘信息_Python 爬取boss直聘招聘信息!
  8. UTF-8 带BOM 和 UTF-8无BOM 的区别?
  9. 米家扫地机器人扫到一半停了_MIJIA 米家 扫地机器人一年使用体验
  10. python定时替换文件内容