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

蓝桥杯-python-递归

递归:通过自我调用解决问题的函数

注意:

#1.递归出口

#2.当前问题如何变成子问题

例子:利用递归写一个阶乘函数,F(n),求n的阶乘

def f(n):
    if n <= 1:
        return 1
    ans = n * f(n-1)
    return ans
print(f(5))




例子:汉诺塔问题

Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图所示。要求把a柱上n个圆盘按下述规则移到c柱
(1)一次只能移一个圆盘;
(2)圆盘只能在三个柱上存放;
(3)在移动过程中,不允许大盘压小盘。
问将这n个盘子从a柱移动到c柱上,输出如何移动?


思路:

定义函数 Move,表示n个盘子,从A挪到C,中间通过B来挪动Move(n,A,B,C)
考虑n个盘子的时候,将上面n-1个盘子看做一个整体
1、首先需要将n-1个盘子从A挪到B,通过c,这就变成递归的问题Move(n-1,A,C,B);
2、然后移动:A->C
3、最后将n-1个盘子从B挪到C,通过A,Move(n-1,B,A,C);
4、n=0的时候,递归出口

#n个盘子从A挪到C,借助B
def Move(n,A,B,C):
    #递归出口
    if n==0:
        return
    #n-1个盘子从A挪到B
    Move(n-1,A,C,B)
    #第n个盘子从A挪到C
    print("{}->{}".format(A,C))
    #n-1个盘子从B挪到C
    Move(n-1,B,A,C)

n=int(input())
Move(n,'A','B','C')

#以上内容仅为本人知识归纳


http://www.kler.cn/a/273444.html

相关文章:

  • SQL拦截(二)InnerInterceptor
  • 【系统架构设计师】2023年真题论文: 论面向对象分析的应用与实现(包括解题思路和素材)
  • Pinia-状态管理
  • 基于向量检索的RAG大模型
  • P9220 「TAOI-1」椎名真昼
  • 例行性工作
  • 算法练习第二十五天| 216.组合总和III、17.电话号码的字母组合
  • 云手机的数据安全有保障吗?
  • 信息系统项目管理师019:存储和数据库(2信息技术发展—2.1信息技术及其发展—2.1.3存储和数据库)
  • 语音识别:whisper部署服务器(远程访问,语音实时识别文字)
  • ElasticSearch文档操作[ES系列] - 第502篇
  • MyBatisPlus最实用教程
  • Tomcat(二)
  • 机器学习_聚类(k-means)
  • Bash Shell中双引号中的感叹号问题详解
  • 基于Spring Boot的社区垃圾分类管理平台的设计与实现
  • RediSearch比Es搜索还快的搜索引擎
  • Java实现定时发送邮件(基于Springboot工程)
  • 【NLP9-Transformer经典案例】
  • 放慢音频速度的三个方法 享受慢音乐
  • 【数据挖掘】实验3:常用的数据管理
  • 【Docker】常用命令 docker build
  • 还原wps纯粹的编辑功能
  • VSCode下使用github初步
  • java的成员变量和局部变量
  • 前端面试拼图-实践经验