栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

了解阶乘递归

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

了解阶乘递归

是的。但是由于它是递归的,所以它的工作方式相反。我曾经有一个面试官这样向我解释:

说出事实(5):

 - fact(5) = 5 * fact(4)- fact(4) = 4 * fact(3)          - fact(3) = 3 * fact(2) - fact(2) = 2 * fact(1)        - fact(1) = 1 * fact(0)        - fact(0) = 1       // This is where your condition returns 1.

现在,假设

-
上面的符号代表回报。您基本上会返回
-
标志后的任何内容。因此,从最低的行返回1。然后,您实际上返回了1(1),即1
*1。因此,它发生在REVERSE级联中,例如:

 = 120 - fact(5) = 5 * 24- fact(4) = 4 * 6 = 24          - fact(3) = 3 * 2 = 6- fact(2) = 2 * 1 = 2        - fact(1) = 1 * 1 = 1       - fact(0) = 1

请记住,每当进行递归操作时,实际上所有操作都是相反的。这确实可以帮助您解决所有递归问题。

这实际上就是为什么尾递归和相关优化如此重要的原因。在内存中,这些调用中的每个调用都被延迟,并且直到其上方的调用(在图中下方)结束并返回之前,都无法返回。因此,非常深层的递归调用可能导致堆栈溢出,除非编译器/解释器通过将其转换为OP中的版本来对此进行优化,以使部分结果立即得到评估且不会延迟。Python不执行此优化,因此您必须谨慎对待递归调用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647862.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号