当前位置: 首页 > news >正文

Python 程序设计讲义(60):Python 的函数——递归函数

Python 程序设计讲义(60):Python 的函数——递归函数

目录

  • Python 程序设计讲义(60):Python 的函数——递归函数
    • 一、递归的概念
    • 二、递归的实现
        • 1、求n!
        • 2、汉诺塔问题

函数一般是被其他程序调用的,但函数也可以被自己内部代码调用。这种在函数内部代码中调用自身的方式称为递归。

一、递归的概念

递归可以将复杂的问题简单化。递归把一个复杂的问题,按照特定的规律,逐步简化为多个更小的同类问题,并延续这个简化过程,直到问题得以解决。然后返回,依次解决问题,最终解决复杂问题。

递归包含以下两点:

1、递归终点:递归的结束条件,当结束时必须有对应的值。

2、递归方式:每次递归要执行的操作,并且该操作是向递归终点发展的。

例如:求5!可以使用递归实现

递归终点:1!=1

5!=5*4!

4!=4*3!

3!=3*2!

2!=2*1!

二、递归的实现

函数中的递归是通过反复调用函数自身来实现的。

1、求n!

代码如下:

def fac(n):if n==1:return 1else:return n*fac(n-1)print(fac(5))程序的执行结果为:
120
2、汉诺塔问题

n个标记为1,2,3,...,n的大小互不相同的盘子,3个标记为A,B,C的塔。借助塔C把所有盘子从塔A移动到塔B

初始状态时所有盘子都放在塔A,任何时候盘子都不能放在比它小的盘子的上方,每次只能移动一个盘子,并且这个盘子必须在塔顶位置。

当只有一个盘子时,即n=1时,我们可以简单地把这个盘子直接从塔A移动到塔B。这就是该问题的终止条件。

n>1时,我们依次解决以下三个问题即可:

(1)借助塔B将前n-1个盘子从塔A移动到塔C

(2)将盘子n从塔A移动到塔B

(3)借助塔A将前n-1个盘子从塔C移动到塔B

代码如下:

def han(n,a,b,c):if n==1:# 当只有一个盘子时,即n=1时,我们可以简单地把这个盘子直接从塔A移动到塔B。print('{}:{}-->{}'.format(n,a,b))else:han(n-1,a,c,b)  #借助塔B将前n-1个盘子从塔A移动到塔C。print('{}:{}-->{}'.format(n,a,b)) #把最后一个盘子直接从塔A移动到塔B。han(n-1,c,b,a)  #借助塔A将前n-1个盘子从塔C移动到塔Bhan(4,'A','B','C')程序结果为:
1:A-->C
2:A-->B
1:C-->B
3:A-->C
1:B-->A
2:B-->C
1:A-->C
4:A-->B
1:C-->B
2:C-->A
1:B-->A
3:C-->B
1:A-->C
2:A-->B
1:C-->B
http://www.dtcms.com/a/313166.html

相关文章:

  • 出现OOM怎么排查
  • 研报复现|史蒂夫·路佛价值选股法则
  • linux ollama模型缓存位置变更
  • 音视频学习(四十九):音频有损压缩
  • 机器学习之决策树(二)
  • 解决PyCharm的Terminal终端conda环境默认为base的问题
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-57,(知识点:电感的选型,电感参数,电感量,饱和电流,直流电阻,自谐振频率)
  • 可视化AI应用构建工具(Dyad)
  • 【内容规范】关于标题中【】标记的使用说明
  • 2.0 vue工程项目的创建
  • TableCurve 3D:自动化曲面拟合与方程发现
  • Steam饥荒联机版多人服务器搭建全解析 -- 阿里云Linux系统构建云服务器
  • Flutter dart控制流程
  • Shell脚本-变量的定义规则
  • 【DL学习笔记】深入学习tenser
  • electron-多线程
  • JDBC核心技术与预编译SQL实战
  • 计算机网络:如何将一个C类网络划分成两个子网
  • 集成电路学习:什么是USB HID人机接口设备
  • Web前端文件上传安全与敏感数据安全处理
  • 时序论文44 | TwinsFormer:通过两个交互组件重构时间序列内在依赖关系
  • [spring-cloud: 服务发现]-源码解析
  • 医院课题管理全动态流程 (AI-Enhanced, Data-Driven Research Lifecycle)
  • 位运算在权限授权中的应用及Vue3实践
  • 第2章算法分析:其他渐进复杂度符号
  • 免费非常好用的录屏软件,体积小
  • 【Java EE】Spring AOP
  • Gumbel-Softmax函数
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年8月3日第155弹
  • 数据与信息的边界:非法获取计算机信息系统数据罪的司法困境与出路