搜索
写经验 领红包

递归的意义(递归的区别)

导语:递归和反递归

复合函数也可能会栈溢出。

将基于栈的函数转换为基于堆的函数。

理解反递归和递归

反递归从第一步开始,使用每一步的输出作为下一步的输入,以复合计算步骤。

递归的操作相同,但它是从最后一步开始。在递归中,必须延迟赋值,直至遇到基本条件(对应于反递归的第一步)为止。

探讨反递归和递归的加法例子

在Java中实现递归

可以通过配置栈的大小来增加这个限制值。

所有线程都会使用相同的栈。

嵌套方法调用的最大数量约为7000。

使用尾调用消除(tail call elimination,TCE)

尾调用优化(tail call optimization,TCO)

使用尾递归方法和函数

不是尾递归:

尾递归写法:

抽象递归表示未计算的方法调用;将它们存储在栈式结构中,直至满足终止条件。以“后进先出”(LIFO)顺序对计算进行调用。

在传统编程中,复合通常意味着复合计算结果。

创建函数调用列表。

使用反递归,每一步都是终止的,因此可以对它求值以获得结果,并使其成为下一步的输入。

使用递归,从另一端开始,必须将未求值的调用放在列表中,直到找到终止条件为止,然后就可以反序处理列表。将这些步骤入栈,直至找到最后一个,然后反序(后进先出)处理栈,再次计算每一个步骤,并用结果作为下一个(实际上是上一个)函数的输入。

改进之后的版本:

为基于栈的递归方法使用一个直接替代品

如何使用:

本文内容由小馨整理编辑!