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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【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


      相关文章
      |
      1天前
      |
      机器学习/深度学习 算法 TensorFlow
      动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
      动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
      15 1
      动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
      |
      12天前
      |
      前端开发 搜索推荐 算法
      中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
      中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
      48 12
      中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
      |
      8天前
      |
      机器学习/深度学习 算法 数据挖掘
      决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
      【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
      24 9
      |
      1天前
      |
      机器学习/深度学习 存储 人工智能
      文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
      使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
      11 0
      文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
      |
      9天前
      |
      存储 算法 测试技术
      预见未来?Python线性回归算法:数据中的秘密预言家
      【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
      25 5
      |
      23天前
      |
      算法 Python
      python函数递归和生成器
      python函数递归和生成器
      |
      22天前
      |
      算法 定位技术 vr&ar
      一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
      一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
      101 0
      一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
      |
      23天前
      |
      运维 算法 数据挖掘
      5个适合新手练习的Python刷题网站
      5个适合新手练习的Python刷题网站
      |
      23天前
      |
      数据采集 Java Python
      python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
      python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
      |
      15天前
      |
      算法 BI Serverless
      基于鱼群算法的散热片形状优化matlab仿真
      本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。