当前位置:首页>python>Python基础学习手册第15章:核心算法入门+案例实战讲解(下篇)

Python基础学习手册第15章:核心算法入门+案例实战讲解(下篇)

  • 2026-10-11 11:02:01
Python基础学习手册第15章:核心算法入门+案例实战讲解(下篇)
如果没有看到上篇,可以先看看上篇内容哈~
📧点击⬇️
Python基础学习手册第14章:6大核心算法入门+案例实战演示(上篇)
✅OK,那么我们继续剩下的三个算法内容
(💡声明:这里说的内容比较粗浅,是为了方便零基础还有4--6年级同学去理解和入门)
基于能够入门了,能有大体的概念以后再去进入深度专业的学习也不迟
🔎递推算法:
按照固定的规律(递推公式),一步步推出后续的结果
就像爬楼梯,一步一步的,每一步都建立于前一步的基础
✍️核心优势:
避免重复计算,效率高,逻辑清晰  常用来解决数列问题、规律问题
📚案例 :斐波那契数列
这个可以说是非常经典和出名的案例
(又称黄金分割数列或兔子数列,是一个每一项都等于前两项之和的整数数列 。该数列通常以 0 和 1 开始,后续数字按公式生成,相邻两项比值趋近黄金分割比)
🖌️图例:
题目(定义):
1,1,2,3,5,8,这个数列从第3项开始 ,每一项都等于前两项之和,
现在求出第10个数字是什么?

💡解题思路:

  1. 初始条件:第 1 个数 a=1,第 2 个数 b=1
  2. 递推公式:下一个数 = 前两个数的和
  3. a , b = b ,  a+b (结合数学交换律看待这个赋值过程)
  4. 循环计算,依次推出后续的数
🖥️代码
a = 1b = 1# 输出前两个数print(a, b, end=" ")# 循环计算后面8个数,凑够10个for i in range(8):    # 递推:下一个数 = 前两个数的和    c = a + b    print(c, end=" ")    # 重新赋值,为下一次计算做准备    a, b = b, c  # 数学的交换律 
🔎递归算法:
主要就是把复杂的大问题拆解成一个个小问题,先解决每一个小问题
最终合并在一起,则实现解决大问题的方法
函数自己调用自己
✍️核心优势:
代码简洁优雅,逻辑贴合问题本身
⚠️注意点:递归必须有明确的递归出口,否则无限循环,程序会报错的
📚案例 :递归求阶乘

题目

求 n 的阶乘,n! = 1×2×3×…×n,比如 5! = 5×4×3×2×1 = 120。

💡解题思路:

  1. 递归公式:n! = n × (n-1)! (大问题拆分成小问题)
  2. 递归出口:当 n=1 时,1! = 1(最小问题有明确答案)
  3. 🖥️代码
    # 定义函数def f(n):    # 递归出口:n=1时,阶乘是1    if n == 1:        return 1    # 递归调用:n! = n * (n-1)!    return n * f(n-1)# 调用函数,求5的阶乘print(f"5的阶乘是:{f(5)}")
🔎搜索算法:
在一堆数据里,按照固定的规则,查找目标元素,直到找到目标、或者找完所有数据
很类似在图书馆找书,按照图书馆的类目标签(图书摆放规则),去找寻自己需要的书籍(目标书籍)
常规的:
线性搜索(顺序查找)
二分查找(折半查找)
以上这2种基本就覆盖小学的大部分使用场景了
📚案例 :线性搜索(顺序查找)

题目

在一个班级的成绩列表里,查找有没有考 100 分的同学,如果有,输出他的位置;如果没有,输出 “没有满分同学”。

💡解题思路:

  1. 从列表的第一个元素开始,
  2. 一个个和 100 对比
  3. 找到返回索引,找完所有元素没找到
  4. 就返回提示
  5. 🖥️代码
# 成绩列表s= [85, 92, 100, 78, 96, 100, 88]# 目标分数n = 100# 标记是否找到m = False# 线性搜索for x,y in enumerate(s):    if y == n:        print(f"找到满分同学,位置是第{x}个")        m = True# 没找到的情况if not m:    print("没有满分同学")
📚案例 :二分查找

题目

在一个从小到大排好序的成绩列表里,快速查找有没有 88 分的同学

💡解题思路:

  1. 二分查找也叫折半查找,每次取列表中间的数和目标对比:

    • 中间数 = 目标,直接找到
    • 中间数 > 目标,目标在左边,只找左半部分
    • 中间数 < 目标,目标在右边,只找右半部分每次排除一半的数据
    • 效率高于线性搜索
  2. ⚠️注意点: 二分查找的前提:数据必须是有序的
  3. 🖥️代码
# 排好序的成绩列表s = [60, 72, 78, 85, 88, 92, 96, 100]# 目标分数n = 88# 左右范围left = 0right = len(s) - 1m = False# 二分查找while left <= right:    # 确定中间位置    mid = (left + right) // 2    mid_s = s[mid]    # 找到目标    if mid_s == n:        print(f"找到88分,位置是第{mid}个")        m = True        break    # 中间数大于目标,找左边    elif mid_s> n:        right = mid - 1    # 中间数小于目标,找右边    else:        left = mid + 1# 没找到的情况if not m:    print("没有找到88分的同学")

⚠️ 新手指南(90% 的新手都踩过的坑)

  1. 枚举算法
    枚举的范围要精准,范围太大会导致程序运行很慢,范围太小会漏掉正确答案
  2. 模拟算法
    一定要 100% 贴合题目规则,漏掉任何一个条件都容易导致结果错误
  3. 贪心算法
    不是所有问题都能用贪心,必须确认 “局部最优能得到全局最优”,否则会出错
  4. 递推算法
    初始条件一定要找对,否则后续所有结果都会错
  5. 递归算法
    必须写明确的递归出口,否则会无限循环,触发栈溢出报错
  6. 二分查找
    必须用在有序数据上,无序数据不能用,否则会找不到正确结果
✌️,那么今天关于算法的后半篇内容的笔记,到这里就分享结束了✌️
你们学会了吗❓️
要好好练习,多写才能熟能生巧
💡如果各位同学有其它有趣经典的题目,也可以评论交流~
如果本文对你有帮助🌹
记得点赞 + 在看 + 收藏👍
分享给身边更多学 Python 的小伙伴👬,你们的认可是我的动力,只有更多的兴趣相同的人看见,才会碰撞出不同的思维火花🔥
文章底部有往期文章哦⬇️
🖥️练习1:用递推算法,求斐波那契数列的第15个数
💡思路:参考文中递推代码,把循环次数改成13次
🖥️练习2:用递归算法,求10的阶乘
💡思路:参考文中递归阶乘代码
🖥️练习3:用线性搜索,在列表[5,2,9,1,5,6]中找到数字9的位置
💡思路:参考文中线性搜索代码
往期文章⬇️:
Python基础学习手册第13章:random随机库的运用,验证码,抽奖,抽签,随机密码等案例实战
Python基础学习手册数据模块总结:一张表格对比列表,元组,字典,集合以及集合6个使用场景(重点)
Python基础学习手册第12章:集合(set)通关,增删改查,交,差,并集,去重操作,案例实战
Python基础学习手册第10章:字典(dict)的数据类型增、删、改、查,遍历、嵌套等方法一文详解

最新文章

随机文章