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

python学习笔记(12)算法(5)迭代与递归

一、迭代

迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段代码,直到这个条件不再满足。

迭代通常用于解决需要逐步推进的计算问题,例如遍历数组、计算阶乘等。迭代的优点是内存使用效率高,易于优化,适合处理大规模数据。

1.for 循环

以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + 100,求和结果使用变量 res 记录。需要注意的是,Python中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 𝑎, 𝑎 + 1, … , b − 1 :

ret=0
for i in range(1,101):
    ret=ret+i
print(ret)

2.while 循环


与 for 循环类似,while 循环也是一种实现迭代的方法。在 while 循环中,程序每轮都会先检查条件,如果条
件为真,则继续执行,否则就结束循环。
下面我们用 while 循环来实现求和 1 + 2 + ⋯ + 100 :

res = 0
i = 1

while i <=100:
    res += i
    i += 1
print(res)

while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步骤。for 循环的代码更加紧凑,while 循环更加灵活,两者都可以实现迭代结构。选择使用哪一个应该根据特定问题的需求来决定。

二、递归

递归(recursion)是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。
1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。
2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。
而从实现的角度看,递归代码主要包含三个要素。
1. 终止条件:用于决定什么时候由“递”转“归”。
2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。
3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。

递归是指在函数或方法中调用自身,以分解问题为更小的子问题,直至达到某个基准条件为止。递归通常用于解决具有自相似性质的问题,如树的遍历、斐波那契数列等。递归的优点是代码简洁,自然表达,适合处理自相似问题。
观察以下代码,我们只需调用函数 recur(n) ,就可以完成 1 + 2 + ⋯ + 100的计算:

def recur(n=100):
    if n == 1:
        return 1
    res = recur(n - 1)
    return n + res

print(recur())

虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范
式。
‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。
‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。
接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。
以上述求和函数为例,设问题 𝑎(𝑖) = 1 + 2 + ⋯ + 𝑖。
‧ 迭代:在循环中模拟求和过程,从 1 遍历到 𝑖,每轮执行求和操作,即可求得 𝑎(𝑖) 。
‧ 递归:将问题分解


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

相关文章:

  • 搜维尔科技:TechViz中的手指追踪:触摸并与虚拟物体互动
  • 排序算法2
  • 基于SSM的宠物领养平台
  • 【前端学习笔记】AJAX、axios、fetch、跨域
  • c++中数组的特点,vector容器的实现(增删改查各个接口的实现)
  • 【DVWA】File Inclusion文件包含实战
  • 快速理解微服务中Sentinel怎么实现限流
  • elasticsearch的索引管理
  • 深度学习基础01_深度学习概述参数初始化激活函数
  • mvn-mac操作小记
  • AIGC-----AIGC在虚拟现实中的应用前景
  • 七天掌握SQL--->第四天:事务处理与并发控制
  • shell编程3,参数传递+算术运算
  • 【论文复现】半监督学习与数据增强
  • 【Axure高保真原型】天气模板
  • Apache Maven Assembly 插件简介
  • Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
  • Text、Data、BSS、Heap、Stack
  • PDF工具集套装 PDFgear v2.1.8 免费中文版
  • Vue 项目中 Axios 的封装方向探索