递归在python代码中工作以找到最大
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了递归在python代码中工作以找到最大,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2197字,纯文字阅读大概需要4分钟。
内容图文
![递归在python代码中工作以找到最大](/upload/InfoBanner/zyjiaocheng/650/b5298addb7e741048a23373d4c2d7e78.jpg)
我是递归概念的新手,试图弄清楚以下代码的工作方式
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,2,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,2,3]
> m> list [0],所以我们返回m = 3
Max([1,2,3])的结果为3.
请注意,代码中对Max的每次调用都会为m和list创建“新”变量,这些变量仅在该函数内部可见.内部Max不知道m和外部Max的列表,反之亦然.
呼叫流程如下所示:
+----------------+
| Max([1,2,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代码中工作以找到最大所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。