【发布时间】:2014-04-06 22:14:18
【问题描述】:
我来自函数式编程背景,首先考虑问题的递归解决方案而不是迭代解决方案。我开始使用 Rebol(特别是 R3),并使用带有累加器的尾递归函数编写了质数因子 kata 的解决方案。但是对于任何足够大的输入,我都会破坏堆栈。我有一个名为“tail-func.r”的 Rebol2 脚本,它实现了 AFAIK 尚未移植到 R3 的尾调用优化版本。我知道 Rebol 3 在许多情况下实现的东西与 R2 不同,那么有没有办法在 Rebol 3 中获得 TCO 而无需任何额外代码?如果没有,有没有更简单的方法可以在不移植旧脚本的情况下获得它?
编辑添加我的代码:
primefactors: function [n m factors] [
either n > 1
[ either (modulo n m) == 0
[ primefactors (n / m) m (append factors m) ]
[ primefactors n (m + 1) factors ] ]
[ factors ]
]
primefactors 30 2 (copy []) => [2 3 5]
【问题讨论】:
-
你能提供一个简单的sn-p代码作为例子吗?
-
当然,我已经添加了我的示例素因子实现。
标签: recursion rebol rebol3 tail-call-optimization