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

    文章

    3614

    浏览量

    93697
  • 递归
    +关注

    关注

    0

    文章

    28

    浏览量

    9013
  • python
    +关注

    关注

    56

    文章

    4793

    浏览量

    84633
收藏 人收藏

    评论

    相关推荐

    stlinkv3minicubeprog检测不到是什么情况

    我刚入手的stlinkv3mini连接电脑后可以被电脑端口识别到,驱动也已经安装好。但是cubeprog检测不到是什么情况
    发表于 05-27 06:40

    labview递归使用你尝试过吗?

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

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

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

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

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

    什么情况选用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

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

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

    什么情况下选用工业主板

    虽然工业主板和普通主板差异比较多,但是某些情况下工业主板用于商业环境也是可以的,但是实用性不是很好。什么情况下选用工业主板呢?
    的头像 发表于 02-14 10:34 844次阅读
    <b class='flag-5'>什么情况</b>下选用工业主板

    Python支持递归函数

    Python支持递归函数——即直接或间接地调用自身以进行循环的函数。递归是颇为高级的话题,并且它在Python相对少见。然而,它是一项应该
    的头像 发表于 02-21 14:28 644次阅读

    什么是Python递归函数

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

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

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

    Python 什么情况下才进行重试

    如何写得优雅、易用,是我们要考虑的问题。 这里要给大家介绍的是一个第三方库 - Tenacity (标题中的重试机制并并不准确,它不是 Python 的内置模块,因此并不能称之为机制),它实现了几乎我们可以使用到的所有重试场景,比如:
    的头像 发表于 10-21 11:18 353次阅读

    Python递归的经典案例

    当我们碰到诸如需要求阶乘或斐波那契数列的问题时,使用普通的循环往往比较麻烦,但如果我们使用递归时,会简单许多,起到事半功倍的效果。这篇文章主要和大家分享一些和递归有关的经典案例,结合一些资料谈一下个人的理解,也借此加深自己对递归
    的头像 发表于 08-05 15:57 331次阅读