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

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

数学上有个经典的递归例子叫阶乘,阶乘通常定义如下:
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. 南京大学人工智能学院院长周志华:培养有源头创新力的人才!
  2. 继鼎晖夹层完成80亿募集后,鼎晖夹层IDC基金首轮关账15亿
  3. 2019-03-14-算法-进化(移动零)
  4. c语言中系统函数设定像素,在imag中对每个像素应用自定义函数的快速方法
  5. php表单提交邮箱_最全实现dede订单表单提交发送到指定邮箱(附前台设置)
  6. android 最新 support,android support v7 下载-android support.v7包 官方最新版 - 河东下载站...
  7. 中考数学不准使用计算机,中考数学蒙题技巧
  8. python学习笔记第四节
  9. Opium推出针对跨链资产桥安全性的保险服务Bridge Protection
  10. 工控补丁星期二:西门子、施耐德电气修复40个漏洞
  11. mysql 8 配置参数优化_MySQL性能优化之参数配置
  12. 导出手机缓存的B站视频或者在PC电脑端下载B站视频到本地
  13. vim的异常退出处理
  14. 2007年春节联欢晚会相声《免费电话》李金斗、大兵、赵卫国
  15. 卷积神经网络——卷积神经网络基础
  16. ToC战场进入尾声,ToB市场战争厮杀即将升级?
  17. Android5.1--PowerManagerService电源管理
  18. Android OnDeviceAppPrediction 优化
  19. 网上赚钱的门路方法什么比较靠谱网上做兼职是真的吗?亲身经历告诉你真相!
  20. 10G图像采集卡,为超高像素高帧率工业相机提供高速传输通道。

热门文章

  1. 连小白都能看懂的微信开发之测试账号申请
  2. ContentProvider理解
  3. kfc扫描点餐系统java_Java实现KFC点餐系统过程解析
  4. 学生成绩管理系统(xhh)
  5. invalidate()和postInvalidate() 的区别及使用
  6. 机器学习(二)多元线性回归算法预测房价
  7. Consider defining a bean of type ‘com.zsb.dao.UserDao‘ in your configuration.
  8. 基址变址寻址来实现暂存数据功能
  9. 关于waitKey()函数按键无反应情况
  10. rsa加密前后端分段解密出现中文部分乱码解决方法