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

简介: 【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


      目录
      打赏
      0
      0
      0
      0
      62
      分享
      相关文章
      |
      2月前
      |
      Apriori算法的Python实例演示
      经过运行,你会看到一些集合出现,每个集合的支持度也会给出。这些集合就是你想要的,经常一起被购买的商品组合。不要忘记,`min_support`参数将决定频繁项集的数量和大小,你可以根据自己的需要进行更改。
      119 18
      论上网限制软件中 Python 动态衰减权重算法于行为管控领域的创新性应用
      在网络安全与行为管理的学术语境中,上网限制软件面临着精准识别并管控用户不合规网络请求的复杂任务。传统的基于静态规则库或固定阈值的策略,在实践中暴露出较高的误判率与较差的动态适应性。本研究引入一种基于 “动态衰减权重算法” 的优化策略,融合时间序列分析与权重衰减机制,旨在显著提升上网限制软件的实时决策效能。
      72 2
      Python中利用遗传算法探索迷宫出路
      本文探讨了如何利用Python和遗传算法解决迷宫问题。迷宫建模通过二维数组实现,0表示通路,1为墙壁,&#39;S&#39;和&#39;E&#39;分别代表起点与终点。遗传算法的核心包括个体编码(路径方向序列)、适应度函数(评估路径有效性)、选择、交叉和变异操作。通过迭代优化,算法逐步生成更优路径,最终找到从起点到终点的最佳解决方案。文末还展示了结果可视化方法及遗传算法的应用前景。
      基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
      在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
      103 7
      员工电脑监控场景下 Python 红黑树算法的深度解析
      在当代企业管理范式中,员工电脑监控业已成为一种广泛采用的策略性手段,其核心目标在于维护企业信息安全、提升工作效能并确保合规性。借助对员工电脑操作的实时监测机制,企业能够敏锐洞察潜在风险,诸如数据泄露、恶意软件侵袭等威胁。而员工电脑监控系统的高效运作,高度依赖于底层的数据结构与算法架构。本文旨在深入探究红黑树(Red - Black Tree)这一数据结构在员工电脑监控领域的应用,并通过 Python 代码实例详尽阐释其实现机制。
      82 7
      基于 Python 迪杰斯特拉算法的局域网计算机监控技术探究
      信息技术高速演进的当下,局域网计算机监控对于保障企业网络安全、优化资源配置以及提升整体运行效能具有关键意义。通过实时监测网络状态、追踪计算机活动,企业得以及时察觉潜在风险并采取相应举措。在这一复杂的监控体系背后,数据结构与算法发挥着不可或缺的作用。本文将聚焦于迪杰斯特拉(Dijkstra)算法,深入探究其在局域网计算机监控中的应用,并借助 Python 代码示例予以详细阐释。
      90 6
      如何在Python下实现摄像头|屏幕|AI视觉算法数据的RTMP直播推送
      本文详细讲解了在Python环境下使用大牛直播SDK实现RTMP推流的过程。从技术背景到代码实现,涵盖Python生态优势、AI视觉算法应用、RTMP稳定性及跨平台支持等内容。通过丰富功能如音频编码、视频编码、实时预览等,结合实际代码示例,为开发者提供完整指南。同时探讨C接口转换Python时的注意事项,包括数据类型映射、内存管理、回调函数等关键点。最终总结Python在RTMP推流与AI视觉算法结合中的重要性与前景,为行业应用带来便利与革新。
      203 5
      Python下的毫秒级延迟RTSP|RTMP播放器技术探究和AI视觉算法对接
      本文深入解析了基于Python实现的RTSP/RTMP播放器,探讨其代码结构、实现原理及优化策略。播放器通过大牛直播SDK提供的接口,支持低延迟播放,适用于实时监控、视频会议和智能分析等场景。文章详细介绍了播放控制、硬件解码、录像与截图功能,并分析了回调机制和UI设计。此外,还讨论了性能优化方法(如硬件加速、异步处理)和功能扩展(如音量调节、多格式支持)。针对AI视觉算法对接,文章提供了YUV/RGB数据处理示例,便于开发者在Python环境下进行算法集成。最终,播放器凭借低延迟、高兼容性和灵活扩展性,为实时交互场景提供了高效解决方案。
      259 4
      基于 Python 哈希表算法的员工上网管理策略研究
      于当下数字化办公环境而言,员工上网管理已成为企业运营管理的关键环节。企业有必要对员工的网络访问行为予以监控,以此确保信息安全并提升工作效率。在处理员工上网管理相关数据时,适宜的数据结构与算法起着举足轻重的作用。本文将深入探究哈希表这一数据结构在员工上网管理场景中的应用,并借助 Python 代码示例展开详尽阐述。
      74 3

      热门文章

      最新文章

      推荐镜像

      更多
      AI助理

      你好,我是AI助理

      可以解答问题、推荐解决方案等