问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

见识一下尾递归的强大,尾递归怎么会比迭代

发布网友 发布时间:2022-04-29 15:32

我来回答

1个回答

热心网友 时间:2022-04-22 17:29

TCO,tail-call optimization,其实有多种解读方式。
最常见的解读方式是:对于尾调用的函数调用,不要浪费栈空间,而要复用调用者的栈空间。这样的结果就是一长串尾调用不会爆栈,而没有TCO的话同样的调用就会爆栈。
从这个意义上说,题主贴的那个recipe确实达到了TCO的部分目的:

通过stack introspection查看调用链上的调用者之中有没有自己
有的话,通过抛异常来迫使栈回退(stack unwind)到之前的一个自己的frame
在回退到的frame接住异常,拿出后来调用的参数,用新参数再次调用自己
这样就可以让尾递归不爆栈。但这样做性能是没保证的…而且对于完全没递归过的一般尾调用也不起作用。
一种对TCO的常见误解是:由编译器或运行时系统把尾调用/尾递归实现得很快。这不是TCO真正要强调的事情——不爆栈才是最重要的。也就是说其实重点不在“优化”,而在于“尾调用不爆栈”这个语义保证。
“proper tail-call”的叫法远比“tail-call optimization”来得合适。
因而像题主说的那种做法,可以算部分TCO,但算不上“性能优化”意义上的优化。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胜达这款车百公里油耗多少? 胜达节能油加盟办厂可靠吗是不是骗子 河南洛阳胜达就是骗子,我把钱交了也不来人了,他们一个老总说了爱咋办... 胜达油是个骗局吗 胜达节能油是什么? 叩解度关于叩解的论述 湿重跟湿重有关的打浆磨片 戴尔XPS M1330-950重要参数 如果到别的单位去面试的话 如果人家问起为什么会选择这家公司而离开另外... 学生会被两个部门同时面试怎么办 寻找一款魔力宝贝单机版,在线等 谁能说说递归和迭代有什么区别? 安卓游戏《宝贝猜拳》求分享。 宝贝猜拳为什么苹果5手机下不了,苹果6可以下载 宝贝猜拳破解版跪求 递归和迭代有哪些区别? 在c语言中递归和迭代有什么区别和联系各自的优缺点是什么二者分别适合解决什? 中国可转债到今为止是否有90支?是哪些?转股了的有哪些,没转的又有哪些?这些公司发生什么情况? 目前信用卡还款最多能分多少期? 昆池岩 百度云 谢谢 如何评价恐怖片《昆池岩》? 湘乡有些什么特产? 昆池岩真的很恐怖? 昆池岩鬼脸是在第几分钟 带烘干的洗衣机好用吗?烘干后要不要再晒? 烘干的衣服会不会很皱? 松下滚筒洗衣机想烘干货自动脱水,必须关机在开启,才能设置吗? 固定资产加速折旧怎么计算 松下p1DL洗衣机有烘干功能吗 固定资产加速折旧有什么好处吗?能具体举列一下吗? 企业固定资产加速折旧的,可以采取哪些 宋祖德的介绍 如何下载悟空的遗产3攻略 宋祖德简介 宋祖德 的个人档案及个人简历 神奇宝贝心跳捉迷藏插曲 宋祖德到底是什么人? Q宠高手来 宋祖德是谁? QQ宠物怎么养好 请问宋祖德是谁? 小心超人的资料~~ 宋祖德全球官方网的人物简介 怎么样使QQ宠物心情变好 宋祖德的早年经历 递归算法的程序结构比迭代算法的程序结构更为精炼,这个正确吗,能不能解释下? 宝宝目前在学认字,有什么有趣的方法教他认字吗? 宋祖德详细资料 宋祖德是否和芙蓉姐姐有关系啊? 宋祖德个人资料背景刘亦菲是男人吗证据照片宋祖德预言有哪些 怎样养QQ宠物才能最省钱??? 养QQ宠物的技巧有哪些???