【发布时间】:2011-03-11 14:03:00
【问题描述】:
演示递归的规范函数是 factorial() 函数。我自己尝试了一个简单的实现并想出了这个:
factorial <- function(x){
if(x==1)
return( 1)
else
return(x*factorial(x-1))
}
从我对该主题的调查来看,似乎存在一些关于使用递归还是简单迭代更好的争论。我想看看 R 是如何实现它的,并在 gregmisc 包中找到了一个 factorial() 函数。我以为我会找到类似我的实现的东西,或者是定期迭代。我发现了什么:
> factorial
function (x)
gamma(x + 1)
<environment: namespace:base>
因此,对于我关于 R 更喜欢递归还是迭代的问题的答案是“都不喜欢”。至少在这个实现中。在 R 中是否有充分的理由避免使用递归函数?
更新:
gregmisc 版本:
>ptm <- proc.time()
> factorial(144)
[1] 5.550294e+249
> proc.time() - ptm
user system elapsed
0.001 0.000 0.001
我的版本:
> factorial(144)
[1] 5.550294e+249
> proc.time() - ptm
user system elapsed
0.002 0.001 0.006
【问题讨论】:
-
还有 prod(2:144) 虽然我猜这可能会更慢。
-
@Tony 它实际上比其他两个更快。
-
浮点版本对于小整数肯定会很慢。