Python支持递归函数

电子说

1.3w人已加入

描述

Python支持递归函数——即直接或间接地调用自身以进行循环的函数。递归是颇为高级的话题,并且它在Python中相对少见。然而,它是一项应该了解的有用的技术,因为它允许程序遍历拥有任意的、不可预知的形状的结构。递归甚至是简单循环和迭代的替换,尽管它不一定是最简单的或最高效的一种。

要对一个数字列表(或者其他序列)求和,我们可以使用内置的sum函数,或者自己编写一个更加定制化的版本。这里我们就用递归来编写一个定制求和函数:

def mysum(L):

... if not L:

... return 0

... else:

... return L[0] + mysum(L[1:]) # Call myself

mysum([1,2,3,4,5])

15

在每一层,这个函数都递归地调用自己来计算列表剩余的值的和,这个和随后加到前面的一项中。当列表变为空的时候,递归循环结束并返回0。当像这样使用递归的时候,对函数调用的每一个打开的层级,在运行时调用堆栈上都有自己的一个函数本地作用域的副本,也就是说,这意味着L在每个层级都是不同的。

这很难理解(并且对于新程序员来说,它常常是难以理解),下面我们尝试给函数添加一个L的打印并再次运行它,从而在每个调用层级记录下当前的列表:

def mysum(L):

... print(L) # Trace recursive levels

... if not L: # L shorter at each level

... return 0

... else:

... return L[0] + mysum(L[1:])

...

mysum([1,2,3,4,5])

[1,2,3,4,5]

[2,3,4,5]

[3,4,5]

[4,5]

[5]

[]

15

正如你所看到的,在每个递归层级上,要加和的列表变得越来越小,直到它变为空——递归循环结束。加和随着递归调用的展开而计算出来。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分