我有一个想要以尾递归形式编写的函数。该函数计算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 特定的,任何其他语言的解决方案同样受欢迎。即使它是一种没有针对尾递归进行优化的语言。