Hàm Ackermann
Hàm Ackermann là ví dụ kinh điển của hàm đệ quy, đáng chú ý vì nó không phải là hàm đệ quy nguyên thủy. Giá trị của nó tăng rất nhanh, cũng như kích thước cây gọi hàm.
Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào hai số m và n làm đối số thứ nhất và thứ hai. Hàm phải trả về số Ackermann A(m,n) được định nghĩa bởi:
A(m,n) = n+1 nếu m=0 A(m,n) = A(m-1,1) nếu m>0, n=0 A(m,n) = A(m-1, A(m,n-1)) nếu m,n > 0
Ví dụ
const m = 12;
const n = 11;
const ackermann = (m, n) => {
if (m === 0) {
return n + 1;
}
if (n === 0) {
return ackermann((m - 1), 1);
}
if (m !== 0 && n !== 0) {
return ackermann((m - 1), ackermann(m, (n - 1)));
}
};
console.log(ackermann(m, n));