递归在python代码中工作以找到最大
我是递归概念的新手,试图弄清楚以下代码的工作方式
我在查看代码时有以下疑问 1)切片如何在这里工作,而没有给出切片应在何处结束[0:9](以这种方式对列表进行切片) 2)如果m> **何时返回m list [0] else list [0] **语句将被调用(我认为它不会被调用,因为在返回之前,我们将多次调用该函数) 最佳答案
欢迎使用递归-很难理解,但是它具有一种奇怪的优雅/美感.
通常可以帮助我考虑一个示例. 让我们假设这个列表:1,2,3 我们将运行Max([1,3]) >列表的长度是3,所以我们跳到else-part > [2,3]的长度为!= 0,我们转到其他 > [3]的长度== 1 >我们得出m的值为3 >再次回顾时间:m = 3,列表= [1,所以我们返回m = 3 Max([1,3])的结果为3. 请注意,代码中对Max的每次调用都会为m和list创建“新”变量,这些变量仅在该函数内部可见.内部Max不知道m和外部Max的列表,反之亦然. 呼叫流程如下所示:
解决地址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) 最终,该函数从列表的末尾开始,以最后一个值作为初始值并移至开头,同时始终保持较大的值,这将导致返回最大值. (这很难写,希望您能理解) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |