|
|
1
56
从一个简单的任务开始,比如在列表中将项目从“a”映射到“b”。我们想写一个有签名的函数
在哪里?
从…开始 无尾递归
这不是尾部递归,因为函数在进行递归调用后仍有工作要做。
如果我将最后一行重新编写为
使用 累加器变量
我们在变量中建立一个新的列表
要更简洁地编写代码:
自从打电话给
它按顺序建立一个列表,而不需要您反转它。 值得一提的是,开始以非尾部递归方式编写函数,它们更易于阅读和使用。 如果你有一个大的列表要浏览,使用一个累加器变量。 如果你找不到一种方便的方法来使用累加器,而且你也没有其他的选择,那就使用continuations。我个人认为不琐碎,大量使用连续体很难阅读。 |
|
|
2
29
试图用比其他例子更简短的解释:
在这里,
然而,
更改中的最后一行
|
|
|
3
10
这里有一个更明显的例子,将其与通常对阶乘所做的比较。
这个有点复杂,但是我们的想法是使用一个累加器来保持运行计数,而不是修改返回值。 此外,这种包装方式通常是一个好主意,这样您的调用者就不必担心为累加器设置种子(请注意,事实是函数本地的) |
|
|
4
4
下面是用无尾递归函数和尾递归函数来计算斐波那契数。 无尾递归版本
尾部递归版本
|
|
|
5
2
|
|
|
Luiz Miranda · 尾递归pow-Erlang 8 年前 |
|
|
Srinivas · Scala中的尾部递归 8 年前 |
|
|
madtyn · Python:有可能使这个尾部递归阶乘更快吗? 8 年前 |
|
|
clay · Scala中的尾部递归findNextAndTail 8 年前 |
|
|
Sanitiy · 如何在调用另一个函数后强制函数退出? 9 年前 |
|
|
Lorinc Nyitrai · Lua-将协程递归重写为尾部调用递归 9 年前 |
|
|
Alex · 尾部递归调用(C primer加上书本示例) 10 年前 |
|
|
Thomas Ahle · 递归联合查找是否可以优化? 10 年前 |
|
|
beta Rob · 这个函数真的是尾部递归的吗? 13 年前 |