J'ai une fonction que je veux écrire en forme récursive de la queue. La fonction calcule le nombre de façons d'obtenir la somme de k
en lançant une matrice s
fois n
fois. J'ai vu la solution mathématique pour cette fonction sur this answer. Il se présente comme suit:Une fonction de convolution peut-elle être écrite sous forme récursive?
Ma référence mise en œuvre récursive en R est:
sum_ways <- function(n_times, k_sum, s_side) {
if (k_sum < n_times || k_sum > n_times * s_side) {
return(0)
} else if (n_times == 1) {
return(1)
} else {
sigma_values <- sapply(
1:s_side,
function(j) sum_ways(n_times - 1, k_sum - j, s_side)
)
return(sum(sigma_values))
}
}
J'ai essayé de réécrire la fonction dans la continuité de style qui passe comme je l'ai appris de this answer, mais Je n'ai pas réussi. Existe-t-il un moyen d'écrire cette fonction sous forme récursive?
EDIT
Je sais que R n'optimise pas pour la queue-récursion. Ma question n'est pas spécifique à R, une solution dans une autre langue est la bienvenue. Même si c'est un langage qui n'optimise pas pour la récursivité de la queue.
Regardez 'Recall'?. –
@ 42- Je suis heureux d'apprendre à ce sujet, merci, mais je ne pouvais pas voir comment cela aiderait puisque je n'ai pas la complication de changer le nom de la fonction – refik
récursivité ne sera pas une mise en œuvre très efficace dans ce cas, utilisez la programmation dynamique/memoization pour stocker les valeurs de 'f' déjà calculées et réutilisées. –