在Python中什么情况必须使用递归

电子说

1.2w人已加入

描述

在前面的文章中,我们说到了可以使用循环语句来替代递归。但是,有时候必须使用递归,或者说使用递归才是更方便的解决方案。

考虑像下面这样的一个任务:计算一个嵌套的子列表结构中所有数字的总和:

[1,[2,[3,4],5],6,[7,8]] # Arbitrarily nested sublists

简单的循环语句在这里不起作用,因为这不是一个线性迭代。嵌套的循环语句也不够用,因为子列表可能嵌套到任意的深度并且以任意的形式嵌套。相反,下面的代码使用递归来对应这种一般性的嵌套,可以顺序地访问子列表:

def sumtree(L):

tot = 0

for x in L:                                # For each item at this level

    if not isinstance(x,list):

        tot += x                           # Add numbers directly

    else:

        tot += sumtree(x)                  # Recur for sublists

return tot

L = [1,[2,[3,4],5],6,[7,8]] # Arbitrary nesting

print(sumtree(L)) # Prints 36

Pathological cases

print(sumtree([1,[2,[3,[4,[5]]]]])) # Prints 15 (right-heavy)

print(sumtree([[[[[1],2],3],4],5])) # Prints 15 (left-heavy)

尽管出于简单性和高效率的目的,对于线性迭代通常应该使用循环语句而不是递归,但我们会发现像上面示例一样的必须使用递归的情况还是很多的。

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

全部0条评论

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

×
20
完善资料,
赚取积分