0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_78858299 来源:人工智能知识分享 作者:人工智能知识分享 2023-02-21 14:25 次阅读

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

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

[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)

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

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

    关注

    88

    文章

    3441

    浏览量

    92439
  • 递归
    +关注

    关注

    0

    文章

    28

    浏览量

    8976
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83479
收藏 人收藏

    评论

    相关推荐

    labview递归使用你尝试过吗?

    关于递归,或许labview很少听过或者使用,不过了解下,算是一种娱乐吧,labview是确实支持递归的关于递归一个可以调用自己的VI就
    发表于 01-05 15:07

    快速掌握Python递归函数与匿名函数调用

    函数是Python技术学习重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常有帮助,这里就针对递归函数与匿名函数两种函数调用进行系统的介绍分析。  一.
    发表于 07-19 16:22

    请问ucos运行态和就绪态是什么情况下转化的?

    请问一下各位大神ucos 运行态 和 就绪态是什么情况下转化的?????就是原子STM32开发指南中的状态 转换图 中有运行态转换到就绪态不知道是
    发表于 08-13 04:35

    请问PAD TO PAD CONSTRAINT是什么情况下使用的?

    由于现在的设计基本上都是同步设计, 那么PAD TO PAD CONSTRAINT 什么情况下使用?
    发表于 09-20 05:28

    什么情况选用PCI板卡,什么情况选用PXI?

    搭测控系统时,什么情况选用PCI板卡,什么情况选用PXI?
    发表于 03-31 20:59

    LabVIEW中使用递归算法

    factorial VI,1!和0!(特殊情况)被定义为结果是1。可重入VI需要强调的一点是,一个递归VI必须在内存复制它的很多备份,这
    发表于 04-17 20:11

    CMOS集成电路,小信号大信号分别指的是什么情况

    CMOS集成电路,小信号大信号分别指的是什么情况
    发表于 04-25 09:24

    数据在内存的存储右对齐是什么情况下使用?

    数据在内存的存储右对齐是什么情况下使用
    发表于 10-15 11:20

    volte语音通话有什么用,什么情况下可以开/关volte

    听很多人都在讲volte高清语音通话那么什么是vote呢?什么情况下需要开通volte呢?什么情况下又可以关闭volte呢?
    发表于 10-21 16:36 1.6w次阅读

    什么情况下要进行电能质量检测?

    什么情况下要进行电能质量检测?
    发表于 09-08 14:20 534次阅读

    Python支持递归函数

    Python支持递归函数——即直接或间接地调用自身以进行循环的函数。递归是颇为高级的话题,并且它在Python中相对少见。然而,它是一项应该了解的有用的技术,因为它允许程序遍历拥有任意
    的头像 发表于 02-21 14:28 431次阅读

    什么是Python递归函数

    递归函数必须有终止条件。编程中,函数的调用要占用名叫栈(stack)的内存空间。调用函数时,程序会将相关的数据存储到计算机的栈里。
    的头像 发表于 02-23 10:25 1266次阅读

    电机什么情况下需要配减速机?

    电机是运动机械的最常用动力源,今天分享什么情况下电机需要配减速机。
    的头像 发表于 05-26 17:47 1272次阅读
    电机<b class='flag-5'>什么情况</b>下需要配减速机?

    IGBT模块损坏时,什么情况导致短路?什么情况导致开路?

    IGBT模块损坏时,什么情况导致短路?什么情况导致开路?  IGBT模块是一种功率模块,用于高功率电子设备控制。当IGBT模块在使用过程中遭受损坏时,可能会出现短路或开路的问题。这两种情况会对电路
    的头像 发表于 10-19 17:08 3248次阅读

    表贴绕线电感断路是什么情况

    请教一下各位,表贴绕线电感,万用表测着断路,高倍显微镜显示没断路,X光也看不出来断路,请问这种一般是什么情况呢?
    的头像 发表于 01-04 09:08 190次阅读
    表贴绕线电感断路是<b class='flag-5'>什么情况</b>?