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

递归的用法和例子

b站视频:https://www.bilibili.com/video/BV1iS4y1e7MJ/?spm_id_from=333.999.0.0&vd_source=1717654b9cbbc6a773c2092070686a95

# 递归的定义:其实就是自己调用自己,一般用函数的形式来进行
"""
特点:
1、一定要有递推式(显示、隐式,也有过程)
2、一定要有递归的出口(为了避免一直执行,一定要中止程序)(一般要写在函数的开头)
3、一定要定义函数(函数自己调用自己)
4、比较耗内存(斐波那契数列重复计算f(3))
"""
"""
递归需要注意的地方:
1、会耗费大量的内存(重复计算),所以用递归一定要谨慎,如果电脑内存不够大,就不要用递归(例如计算斐波那契数列)
"""# 举例
"""
1、递推式:
f(1)=1
f(2)=f(1)+1
f(3)=f(2)+1
f(4)=f(3)+1
.
.
.
f(n)=f(n-1)+12、出口
f(1)=1
"""def f(n):# 先写递归的出口if n == 1:return 1else:return f(n-1) + 1a = f(5)
print(a)# 斐波那契数列(会重复计算很多f(2)+f(1))
def f(n):if n == 1:return 0elif n == 2:return 1else:return f(n - 1) + f(n - 2)print(f(6))# 小明一次最多能上三层楼梯,爬到第n层能有多少种爬法
def f(n):if n == 1:return 1elif n == 2:return 2elif n == 3:return 4else:return f(n - 1) + f(n - 2) + f(n - 3)print(f(5))# 冒泡排序(使用递归)
def f(m1, m2):global list1# 递归出口if m1 == m2:return# 递推式,没有公式,是一个过程for i in range(m1, m2):if list1[i] > list1[i + 1]:list1[i], list1[i + 1] = list1[i + 1], list1[i]# 递归f(m1, m2 - 1)list1 = [12, 11, 5, 6, 7, 18]
f(0, len(list1) - 1)
print(list1)# 递归:求和,求最大值
def f(n):if n == 1:return 1else:return n + f(n - 1)print(f(10))list1 = [12, 14, 15, 8, 7]def f(n):if n == 1:return list1[0]else:return max(f(n - 1), list1[n - 1])print(f(len(list1)))# 因式分解
num = 1def f(m1, m2):global num# 循环结束就是出口,所以不写for i in range(m1, m2):if m2 % i == 0 and m2 // i >= i:num += 1f(i, m2 // i)f(2, 36)
print(num)
http://www.lryc.cn/news/124326.html

相关文章:

  • 极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)
  • springBoot 简单的demo
  • [国产MCU]-BL602开发实例-实时时钟(RTC)
  • 大数据Flink(六十三):SqlClient工具的使用
  • 哈威比例多路阀控制放大器
  • Java bean 是个什么概念?
  • 微服务系列文章之 Springboot+Vue实现登录注册
  • 【Docker】如何在设计 dockerfile 过程中,设置容器启动后的定时任务
  • 【leetcode】第三章 哈希表part01
  • Docker中Tomcat部署步骤
  • pycharm 安装库
  • 使用 Ploomber、Arima、Python 和 Slurm 进行时间序列预测
  • springboot第35集:微服务与flutter安卓App开发
  • java 把list转成json
  • R语言实现随机生存森林(2)
  • 泛型类接口方法学习
  • Docker自动化部署安装(十)之安装SonarQube
  • [QT/C++]如何得知鼠标事件是由触摸事件转换而来的,使得鼠标触摸事件分离
  • 消防态势标绘工具,为消防基层工作助力
  • 网络协议栈-基础知识
  • [Mongodb 5.0]聚合操作
  • Shell 变量
  • SRM订单管理:优化供应商关系
  • Unity 实现2D地面挖洞!涂抹地形(碰撞部分,方法二)
  • 简化Gerber数据传输过程丨GC PowerPlace简介
  • rust关于项目结构包,Crate和mod和目录的组织
  • 如何微调优化你的ChatGPT提示来提高对话质量
  • 微信小程序实现下拉刷新
  • 一、编程规约
  • pytest数据驱动 pandas