मैंने एक एल्गोरिदमिक पुस्तक में पढ़ा है कि एकरमेन फ़ंक्शन को पूंछ-रिकर्सिव नहीं बनाया जा सकता है (वे क्या कहते हैं "इसे पुनरावृत्ति में परिवर्तित नहीं किया जा सकता")। मैं बहुत इस बारे में उलझाना कर रहा हूँ, इसलिए मैं करने की कोशिश की और इस के साथ आते हैं:क्या यह कार्यान्वयन पूंछ-पुनरावर्ती
let Ackb m n =
let rec rAck cont m n =
match (m, n) with
| 0, n -> cont (n+1)
| m, 0 -> rAck cont (m-1) 1
| m, n -> rAck (fun x -> rAck cont (m-1) x) m (n-1)
in rAck (fun x -> x) m n
;;
(यह OCaml/एफ # कोड है)।
मेरी समस्या यह है कि, मुझे यकीन नहीं है कि यह वास्तव में पूंछ रिकर्सिव है। क्या आप पुष्टि कर सकते हैं कि यह है? यदि नहीं, क्यों? और आखिरकार, इसका मतलब क्या है जब लोग कहते हैं कि एकरमेन फ़ंक्शन आदिम रिकर्सिव नहीं है?
धन्यवाद!
आप अभी भी उस लैम्ब्डा को पार करते समय फ़ंक्शन कॉल का "स्टैक" बना रहे हैं। –
हां, यह पूंछ-पुनरावर्ती है। आप फ़ाइल को '-लाइनर' विकल्प के साथ ओकंप्लॉप के साथ संकलित कर सकते हैं। यह आपको यह निर्धारित करने में मदद कर सकता है कि आपका फ़ंक्शन पूंछ-कॉल का उपयोग कर रहा है या नहीं। – nlucaroni