我来自函数式编程的背景,对解决问题首先考虑递归方案,而非迭代方案。我开始使用Rebol(具体是R3)并编写了一个使用尾递归函数和累加器解决素数分解 kata 的方案。但是,对于足够大的输入,我会爆栈。我有一个名为“tail-func.r”的Rebol2脚本,它实现了尾调用优化的版本,据我所知,它还没有移植到R3。我知道在许多情况下,Rebol 3与R2的实现方式不同,因此是否有一种方法可以在没有任何额外代码的情况下获得R3中的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]