Tôi đã cố gắng hiểu Tail call optimization
trong ngữ cảnh JavaScript và đã viết các phương pháp đệ quy và đệ quy dưới đây cho factorial()
.Các chức năng trong JavaScript đuôi có được tối ưu hóa không?
đệ quy:
function factorial (n) {
if (n < 2) {
return 1;
} else {
return n * factorial(n-1);
}
}
đuôi đệ quy:
function factorial (n) {
function fact(n, acc) {
if (n < 2) {
return acc;
} else {
return fact(n-1, n * acc);
}
}
return fact(n, 1)
}
Nhưng tôi không chắc chắn nếu phiên bản tail-recursive
của hàm sẽ được tối ưu hóa bởi trình biên dịch Javascript như nó được thực hiện bằng các ngôn ngữ khác như Scala, vv .. Ai đó có thể giúp tôi với cái này?
Dòng 2 trong đoạn đuôi đệ quy cần phải được 'chức năng thực tế (n, acc) 'để làm việc. Cảm ơn đoạn trích, tôi đã cố gắng tìm hiểu điều này ngay hôm nay! –