> 历史文化
递归的意义(递归的区别)
导语:递归和反递归
复合函数也可能会栈溢出。
将基于栈的函数转换为基于堆的函数。
理解反递归和递归反递归从第一步开始,使用每一步的输出作为下一步的输入,以复合计算步骤。
递归的操作相同,但它是从最后一步开始。在递归中,必须延迟赋值,直至遇到基本条件(对应于反递归的第一步)为止。
探讨反递归和递归的加法例子在Java中实现递归可以通过配置栈的大小来增加这个限制值。
所有线程都会使用相同的栈。
嵌套方法调用的最大数量约为7000。
使用尾调用消除(tail call elimination,TCE)尾调用优化(tail call optimization,TCO)
使用尾递归方法和函数不是尾递归:
尾递归写法:
抽象递归表示未计算的方法调用;将它们存储在栈式结构中,直至满足终止条件。以“后进先出”(LIFO)顺序对计算进行调用。在传统编程中,复合通常意味着复合计算结果。
创建函数调用列表。
使用反递归,每一步都是终止的,因此可以对它求值以获得结果,并使其成为下一步的输入。
使用递归,从另一端开始,必须将未求值的调用放在列表中,直到找到终止条件为止,然后就可以反序处理列表。将这些步骤入栈,直至找到最后一个,然后反序(后进先出)处理栈,再次计算每一个步骤,并用结果作为下一个(实际上是上一个)函数的输入。
改进之后的版本:
为基于栈的递归方法使用一个直接替代品如何使用:
本文内容由小馨整理编辑!