Computer >> Máy Tính >  >> Lập trình >> Javascript

Tính toán số Ackerman cho các đầu vào trong JavaScript

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));