【Python百日刷题计划】Day6~初识算法与递归

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 【Python百日刷题计划】Day6~初识算法与递归

 🍀目录

🍏例一前言

🍏例一要求

🍏例一解析

🍏二分法流程图分析

🍏例一答案

🍅例二前言

🍅例二要求

🍅例二解析

🍅例二答案

🍅例题二思考

🍀最后


🍏例一前言

如果有一个列表 'l',要 让你从这个列表中找到66的位置,你要怎么做?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你可能使用以下方法会很简单的到结果:

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
print('l中66的索引位置是:',l.index(66))
输出结果:
l中66的索引位置是: 17
image.gif

我们之所以用index方法可以找到,是因为python内部帮我们实现了查找方法。如果题目明确规定index方法不给你用了,并且只能够使用算法查找,你还能找到这个66么?

🍏例一要求

使用二分查找算法实现列表中index方法的功能,例如给你一个列表

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

通过调用你写的find函数可以返回该列表中你想查找的元素的下标,如果你想查找的元素不在该列表中调用find函数则返回'你想要的值不在该列表中'

🍏例一解析

    • 简述一下算法:

           我们学习的算法都是过去时,只有我们了解基础算法,才能够创造出更好的算法,不是

    所有的事情都能套用现成的方法解决,有的时候会用到学过的算法知识来解决新的问题。

      • 二分法的使用条件:

      1)数组为有序数组。

      2)同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。        

      解决本题之前应该要熟悉递归函数的使用方法以及二分法的条件

      🍏二分法流程图分析

      比如们要在列表中找到元素66对应的位置,应该将每一次列表的中间数与66进行比较,第一次比较中间值41<66,则说明66位于41的右边,则下一次取41右边的所有数的中间值与66进行比较,以此类推直到中间值与66相同就找到了66所在的位置。

      image.gif编辑

      🍏例一答案

      l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
      #确定函数的参数l为想找元素所在的列表,aim为想找的元素,其他为默认参数
      def find(l,aim,start=0,end=None):              
          end = len(l) if end is None else end
          mid_index = (end - start) // 2 + start    #求中间值mid_index
          if start <= end:                          #若start > end则说明元素不在该列表中
              if aim > l[mid_index]:
                  return find(l,aim,start = mid_index + 1,end=end)
              if aim < l[mid_index]:
                  return find(l, aim,start=start,end=mid_index - 1)
              else:
                  return mid_index
          else:
              print('你想要的值不在该列表中')
      image.gif

      🍅例二前言

      这里我们又要举个例子来说明递归能做的事情。

      例二:

      现在你们问我,A同学多大了?我说我不告诉你,但A同学比 B同学大两岁。

      你想知道A同学多大,你是不是还得去问B同学的年龄?B同学说,我也不告诉你,但我比C同学大两岁。

      你又问C同学的年龄,C同学也不告诉你,他说他比D同学大两岁。

      那你问D同学,D同学终于告诉你,他18了。

      这个时候你是不是就知道了?A同学多大?

      image.gif

      🍅例二要求

      使用递归函数求得各个同学的年龄

      🍅例二解析

      本题难度十分小,主要是了解递归

      递归函数:在一个函数里在调用这个函数本身。

      递归的最大深度:998

      正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去。但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了997

      条件:

        1、超过最大递归限制的报错
         2、只要写递归函数,必须有结束条件
      返回值:
         1、不要只看到return就认为已经返回了,要看返回操作是在递归的第几层的时候发生的
         然后返回给了谁
         2、如果不是返回给了最外层函数,调用者就接收不到,需要再分析,看如何把结果返回回来

      🍅例二答案

      参数n表示想找学生的序号:例A(n = 1),B(n = 2)……

      def age(n):
          if n == 4:
              return 18
          else:
              return age(n+1) + 2
      image.gif

      🍅例题二思考

      找出下面代码出错的原因,为什么没写return不是返回None而是报错呢?以及为什么会出现以下的错误类型

      def age(n):
          if n == 4:
              return 18
          else:
              age(n+1) + 2
      print(age(2))
      输出结果:
      TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
      错误翻译:
      TypeError:+ 不支持的操作数类型:“NoneType”和“int”
      image.gif

      结合以下代码分析

      image.gif


      相关文章
      |
      11天前
      |
      机器学习/深度学习 人工智能 算法
      猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
      宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
      143 55
      |
      27天前
      |
      搜索推荐 Python
      利用Python内置函数实现的冒泡排序算法
      在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
      126 67
      |
      27天前
      |
      存储 搜索推荐 Python
      用 Python 实现快速排序算法。
      快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
      118 61
      |
      21天前
      |
      机器学习/深度学习 人工智能 算法
      【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
      宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
      112 29
      【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
      |
      3天前
      |
      存储 运维 监控
      探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
      在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
      42 20
      |
      1天前
      |
      存储 算法 Python
      文件管理系统中基于 Python 语言的二叉树查找算法探秘
      在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
      33 5
      |
      27天前
      |
      数据采集 存储 算法
      Python 中的数据结构和算法优化策略
      Python中的数据结构和算法如何进行优化?
      |
      1天前
      |
      存储 缓存 算法
      探索企业文件管理软件:Python中的哈希表算法应用
      企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
      22 0
      |
      2天前
      |
      机器学习/深度学习 算法
      基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
      本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
      104 80
      |
      21天前
      |
      算法
      基于WOA算法的SVDD参数寻优matlab仿真
      该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。