Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การคำนวณจำนวนแอคเคอร์แมนสำหรับอินพุตใน JavaScript

ฟังก์ชันแอคเคอร์แมน

ฟังก์ชันแอคเคอร์แมนเป็นตัวอย่างคลาสสิกของฟังก์ชันเรียกซ้ำ (recursive function) โดดเด่นอย่างยิ่งเพราะมันไม่ใช่ฟังก์ชันเรียกซ้ำพื้นฐาน (primitive recursive function) ค่าของมันเติบโตอย่างรวดเร็วมาก เช่นเดียวกับขนาดของต้นไม้การเรียกซ้ำ

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลขสองตัว m และ n เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์ที่สอง ฟังก์ชันควรคืนค่าจำนวนแอคเคอร์แมน A(m,n) ที่นิยามโดย

A(m,n) = n+1 ถ้า m=0
A(m,n) = A(m-1,1) ถ้า m>0, n=0
A(m,n) = A(m-1,A(m,n-1)) ถ้า m,n > 0

ตัวอย่างโค้ด

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