递归在python代码中工作以找到最大

递归在python代码中工作以找到最大,第1张

概述我是递归概念的新手,试图弄清楚以下代码的工作方式def Max(list): if len(list) == 1: return list[0] else: m = Max(list[1:]) return m if m > list[0] else list[0] def main()

我是递归概念的新手,试图弄清楚以下代码的工作方式

def Max(List):    if len(List) == 1:        return List[0]    else:        m = Max(List[1:])        return m if m > List[0] else List[0]def main():    List = eval(raw_input(" please enter a List of numbers: "))    print("the largest number is: ",Max(List))    main()

我在查看代码时有以下疑问

1)切片如何在这里工作,而没有给出切片应在何处结束[0:9](以这种方式对列表进行切片)

2)如果m> **何时返回m List [0] else List [0] **语句将被调用(我认为它不会被调用,因为在返回之前,我们将多次调用该函数)

最佳答案欢迎使用递归-很难理解,但是它具有一种奇怪的优雅/美感.

通常可以帮助我考虑一个示例.

让我们假设这个列表:1,2,3

我们将运行Max([1,3])

>列表的长度是3,所以我们跳到else-part
>我们运行Max([2,3])并将结果保存到m(递归#1)

> [2,3]的长度为!= 0,我们转到其他
>我们运行Max([3])并将结果保存到m(递归2)

> [3]的长度== 1
>我们返回索引0,即3(递归2结束)

>我们得出m的值为3
>现在,如果m>返回语句m.列表[0]否则列表[0]
>回顾:m = 3,列表= [2,3]
> m> List [0],因此我们返回m = 3(递归#1结束)

>再次回顾时间:m = 3,列表= [1,所以我们返回m = 3

Max([1,3])的结果为3.

请注意,代码中对Max的每次调用都会为m和List创建“新”变量,这些变量仅在该函数内部可见.内部Max不知道m和外部Max的列表,反之亦然.

呼叫流程如下所示:

+----------------+|   Max([1,3]  | +----++------^---------+      | Step 1       |                |Step 4 |       +--------v------+       +-------+   Max([2,3])  +---+   return 3    +---^-----------+   | Step 2                   |               |           Step 3  |     +---------v-----+                   +-----+   Max([3])    |             return 3    +---------------+

解决地址1):

当我们使用[n:]进行切片时,这意味着:从索引n开始并获取列表的其余部分.

地址2):

退出递归后,请参见上面的示例.

进一步阅读

CS教育者> Analogy for teaching recursion以上

根据您的评论进行编辑

为了帮助您理解该行,如果m> List [0] else List [0]我建议您尝试从心理上跟踪递归调用之前和之后的状态.

Max实现的想法是这样的:递归地转到列表中的最后一个元素,然后将其与倒数第二个元素进行比较(如果最后一个较大),请保留该元素,否则保留倒数第二个.

如果您的列表如下所示[1,6,3,5,4,2],则递归级别将返回以下内容:

括号中的第一个数字是m,第二个数字是List [0]的值

> 2(不适用,2)
> 4(2,4)
> 5(4,5)
> 5(5,3)
> 6(5,6)
> 6(6,1)

最终,该函数从列表的末尾开始,以最后一个值作为初始值并移至开头,同时始终保持较大的值,这将导致返回最大值.

(这很难写,希望您能理解)

总结

以上是内存溢出为你收集整理的递归在python代码中工作以找到最大 全部内容,希望文章能够帮你解决递归在python代码中工作以找到最大 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1199593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存