我有一个关于这篇文章的问题。
这段代码之间
function odds(n, p) {
if(n == 0) {
return 1
} else {
return (n / p) * odds(n - 1, p - 1)
}
}
和这段代码
(function(){
var odds1 = function(n, p, acc) {
if(n == 0) {
return acc
} else {
return odds1(n - 1, p - 1, (n / p) * acc)
}
}
odds = function(n, p) {
return odds1(n, p, 1)
}
})()
1)我对这有多大帮助感到困惑。第二个片段是否只是有一个尾调用,它会产生更少的开销,因为它会在再次调用自己之前计算它需要什么,或者我还缺少什么?
据我了解,尾调用仍未消除,只是进行了优化。
2)为什么需要odds
和odds1
无论如何?我也不清楚。