了解阶乘递归

了解阶乘递归,第1张

了解阶乘递归

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

说出事实(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不执行此优化,因此您必须谨慎对待递归调用。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存