Каноническая функция для демонстрации рекурсии - это функция факториала(). Я попробовал простую реализацию этого сам и придумал это:
factorial <- function(x){
if(x==1)
return( 1)
else
return(x*factorial(x-1))
}
Из моего обзора темы, по-видимому, есть некоторые споры о том, лучше ли использовать рекурсию или простое итерацию. Я хотел увидеть, как R реализует его и нашел функцию factorial() в пакете gregmisc. Я думал, что найду что-то вроде моей реализации или вместо обычной итерации. Что я нашел это:
> factorial
function (x)
gamma(x + 1)
<environment: namespace:base>
Таким образом, ответ на мой вопрос о том, предпочитает ли R рекурсия или итерация, "ни". По крайней мере, в этой реализации. Являются ли рекурсивные функции исключенными в R по уважительной причине?
Update:
версия 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