У меня есть функция, которую я хочу написать в хвостовой рекурсивной форме. Функция вычисляет количество способов получить сумму k
, бросая s
односторонний кубик n
раз. Я видел математическое решение этой функции в этом ответе. Это выглядит следующим образом:
Моя справочная рекурсивная реализация в R:
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))
}
}
Я попытался переписать функцию в стиле продолжения передачи, как я узнал из этого ответа, но я не успешный. Есть ли способ записать эту функцию в хвостовой рекурсивной форме?
ИЗМЕНИТЬ
Я знаю, что R не оптимизирует хвостовую рекурсию. Мой вопрос не относится к R, решение на любом другом языке также приветствуется. Даже если это язык, который не оптимизирован для хвостовой рекурсии.
?Recall
. - person IRTFM   schedule 11.01.2017f
и их повторного использования. - person Sandipan Dey   schedule 11.01.2017