python - 递归如何找到最大值?
问题描述
有人可以解释一下这条线是如何restMax = max(A[1:])
在数组中找到最大元素的吗?我知道它每次都将其分解为子数组,但这如何找到最大值?
def max(A):
if len(A)==0 :
return None
if len(A)==1 :
return A[0]
restMax = max(A[1:])
if A[0]>restMax :
return A[0]
return restMax
解决方案
递归函数一开始可能会很棘手,所以让我们看看这个函数的作用:
如果max(A)
在空数组上调用,则返回 none。
if len(A)==0 :
return None
如果max(A)
在具有单个元素的数组上调用,则返回该元素:
if len(A)==1 :
return A[0]
如果max(A)
在具有多个元素的数组上调用,它会执行以下操作:
- 它分为
A
两个:第一个元素(头部,A[0]
)和其他元素(尾部,A[1:]
)。 - 它递归地找出尾部的最大值是多少(
max(A[1:])
棘手的部分)。 - 如果头部大于尾部的最大值,则返回头部。否则它返回尾部的最大值。
把它们放在一起:
让我们来看看是什么max([1,4,7,2])
样子的:
(1)
[1,4,7,2]
有几个元素,所以我们把它一分为二:1
和[4,7,2]
。让我们找出是什么max([4,7,2])
:(2)
[4,7,2]
分为4
和[7,2]
。让我们找出是什么max([7,2])
。(3)
[7, 2]
分为7
和[2]
。让我们找出是什么max([2])
。- (4)
[2]
有一个元素,所以max([2])
返回2
。
- (4)
现在我们回到(3)。我们比较
7
哪个max([2])
返回2
。7
更大,所以max([7,2])
返回7
。
现在我们回到(2)。我们比较
4
andmax([7,2])
,我们已经看到返回7
。既然7
大了4
,我们就回去7
。
现在我们回到(1)。我们已将原始数组拆分为
1
and[4,7,2]
。max([4,7,2])
返回7
,所以我们比较1
和7
。7
更大,所以max([1,4,7,2])
返回7
。
我们完成了!max([1,4,7,2])
是 7。
推荐阅读
- python - 如何从不同文件夹目录的包中导入模块?
- jquery - 数据表搜索表单不重绘
- sql - 最小和最大日期来自 Hive 中给定的记录集
- python - Python键盘记录器 - 从CMD执行时不保持键盘监听器打开
- canvas - 电子和createPNGStream
- postgresql - PostgreSQL:数据子集中的非空替换
- ruby-on-rails - 如何在遏制中格式化此 GET?
- mlflow - 您如何开始使用 MLflow SQL 存储而不是文件系统存储?
- autodesk-data-management - GET 用户端点返回 1003:客户端 ID 无权访问该帐户
- c# - 如何使用windows账号登录网站?