Hàm Ackermann
Hàm Ackermann là một ví dụ cổ điển về một hàm đệ quy, đặc biệt đáng chú ý vì nó không phải là một hàm đệ quy nguyên thủy. Nó phát triển rất nhanh về giá trị, cũng như kích thước của cây cuộc gọi của nó.
Vấn đề
Chúng tôi được yêu cầu viết một hàm JavaScript nhận hai số, m và n làm đối số thứ nhất và thứ hai. Hàm của chúng ta sẽ trả về số Ackermann A (m, n) được xác định theo
A(m,n) = n+1 if m=0 A(m,n) = A(m-1,1) if m>0 , n=0 A(m,n) = A(m-1,A(m,n-1)) if 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));