एकरमैन फ़ंक्शन
एकरमैन फ़ंक्शन एक क्लासिक रिकर्सिव फ़ंक्शन का उदाहरण है, विशेष रूप से इसलिए उल्लेखनीय है क्योंकि यह एक प्रिमिटिव रिकर्सिव फ़ंक्शन नहीं है। इसका मान बहुत तेजी से बढ़ता है, जैसा कि इसके कॉल ट्री का आकार भी।
समस्या
हमें एक 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));