当前位置: 首页 > 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.lryc.cn/news/608788.html

相关文章:

  • 从“配置地狱”到“云端乐园”——Nacos 如何成为分布式微服务配置中心的“定海神针”
  • 【MySQL】MySQL中锁有哪些?
  • ethtool,lspci,iperf工具常用命令总结
  • 26李林880高数第一章 函数、极限、连续
  • Shell脚本-变量的定义规则
  • 西门子PLC基础指令4:输出指令、立即输出指令
  • JavaScript 性能优化实战指南:从运行时到用户体验的全面提升​
  • adb 与pad 交互方法
  • MyBatis动态SQL精要:从<if>到<foreach>的灵活拼接之道
  • Go语言声明变量
  • 怎么修改论文格式呢?提供一份论文格式模板
  • 【Bluedroid】btif_av_handle_event 流程源码解析
  • 面向智能体的上下文工程:策略、实现与 LangGraph 实践
  • LangChain4J入门:接入大模型
  • 系统学习算法:专题十六 字符串
  • 第三章-提示词-高级:开启智能交互新境界(13/36)
  • 日常--详细介绍qt Designer常用快捷键(详细图文)
  • 【QT】概述
  • 高质量数据集|建设三大难点
  • 01.MySQL 安装
  • 服务器中切换盘的操作指南
  • Android 之 MVVM架构
  • 使用 Docker 部署 Golang 程序
  • 第四章:OSPF 协议
  • Dify中自定义工具类的类型
  • WebMvc自动配置流程讲解
  • MySQL 索引失效的场景与原因
  • 嵌入式开发学习———Linux环境下IO进程线程学习(二)
  • 04.Redis 的多实例
  • 笔试——Day27