Application récursive d'une fonction
Coucou,
je viens de faire ça, ça sert à calculer des listes de valeurs de fonctions
récursives. Par exemple, pour calculer les premiers termes de la suite de Fibonacci :
Code:
1 2 3 4 5 6 7
| > recurse(X = c(1,1), FUN = sum, n = 2, times = 40)
[1] 1 1 2 3 5 8 13
[8] 21 34 55 89 144 233 377
[15] 610 987 1597 2584 4181 6765 10946
[22] 17711 28657 46368 75025 121393 196418 317811
[29] 514229 832040 1346269 2178309 3524578 5702887 9227465
[36] 14930352 24157817 39088169 63245986 102334155 165580141 267914296 |
OK ? FUN est la fonction à appliquer, n est le nombre d'éléments à lui passer (ordre de récurrence de la suite), times est le nombre de fois où on doit le faire, et X est le vecteur avec lequel on démarre (de longueur >= n)...
Ma question est la suivante : je suis très surpris qu'un truc pareil n'existe pas dans R ; j'ai exploré toutes les variantes de apply (lapply, rapply, mapply, etc) et je n’ai rien trouvé. Quelqu'un a une idée ?
À part ça, si vous voyez une amélioration à suggérer à ce code, allez-y...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| recurse <- function(X, FUN, n, times)
{
l <- length(X);
if(n > l)
{
stop("Pas assez de valeurs dans X pour démarrer.");
}
args <- X[(l-n+1):l];
for(i in 1:times)
{
nxt <- FUN(args);
X <- c(X,nxt)
args <- c( args[2:n], nxt);
}
return(X);
} |