सहज जवाब यह है कि अगर आपके पास अनबाउंड लूप नहीं हैं और आपके पास रिकर्सन नहीं है और आपके पास गोटो नहीं है, तो आपके प्रोग्राम समाप्त हो जाते हैं। यह बिल्कुल सच नहीं है, गैर-समाप्ति को चुपके करने के अन्य तरीके हैं, लेकिन यह अधिकांश व्यावहारिक मामलों के लिए पर्याप्त है। बेशक, यह गलत है, इन निर्माणों के साथ भाषाएं हैं जो गैर-समाप्ति कार्यक्रमों की अनुमति नहीं देते हैं, लेकिन वे अन्य प्रकार के प्रतिबंधों का उपयोग करते हैं जैसे कि परिष्कृत प्रकार की प्रणालियां।
प्रत्यावर्तन
स्क्रिप्टिंग भाषाओं में एक सामान्य प्रतिबंध पुनरावर्ती को गतिशील रूप से रोकने के लिए है: यदि A B कॉल C को कॉल करता है ... A को कॉल करता है, तो दुभाषिया (या चेकर, आपके मामले में) एक त्रुटि देता है या संकेत देता है, भले ही पुनरावृत्ति वास्तव में समाप्त हो जाए। दो ठोस उदाहरण:
C प्रीप्रोसेसर एक मैक्रो को बरकरार रखता है जबकि यह उस मैक्रो का विस्तार कर रहा है। एक फ़ंक्शन के आसपास एक आवरण को परिभाषित करने के लिए सबसे आम उपयोग है:
#define f(x) (printf("calling f(%d)\n", (x)), f(x))
f(3);
इसका विस्तार होता है
(printf("calling f(%d)\n", (3)), f(3))
पारस्परिक पुनरावृत्ति को भी संभाला जाता है। एक परिणाम यह है कि सी प्रीप्रोसेसर हमेशा समाप्त होता है, हालांकि उच्च रन-टाइम जटिलता के साथ मैक्रोज़ का निर्माण करना संभव है।
#define f0(x) x(x)x(x)
#define f1(x) f0(f0(x))
#define f2(x) f1(f1(x))
#define f3(x) f2(f2(x))
f3(x)
यूनिक्स के गोले एलियासेस का पुनरावर्ती रूप से विस्तार करते हैं, लेकिन केवल तब तक जब तक वे एक उपनाम का सामना नहीं करते हैं जो पहले से ही विस्तारित हो रहा है। फिर, प्राथमिक उद्देश्य समान रूप से नामित कमांड के लिए एक उपनाम को परिभाषित करना है।
alias ls='ls --color'
alias ll='ls -l'
nn
यह साबित करने के लिए और अधिक सामान्य तकनीकें हैं कि पुनरावर्ती कॉल समाप्त हो जाते हैं, जैसे कि कुछ सकारात्मक पूर्णांक जो हमेशा एक पुनरावर्ती कॉल से घटते हैं, लेकिन ये पता लगाने के लिए काफी कठिन हैं। वे अक्सर सत्यापित करने के लिए कठिन हैं, अकेले अनुमान लगाते हैं।
लूप्स
for
मn
विशेष रूप से, लूप के लिए (साथ ही उचित भाषा निर्माण जैसे सशर्त), आप सभी आदिम पुनरावर्ती कार्य लिख सकते हैं , और इसके विपरीत। आप आदिम पुनरावर्ती कार्यों को वाक्यात्मक रूप से पहचान सकते हैं (यदि वे असंबद्ध तरीके से लिखे गए हैं), क्योंकि वे लूप या गोटो या पुनरावृत्ति या अन्य चाल का उपयोग नहीं करते हैं। आदिम पुनरावर्ती कार्यों को समाप्त करने की गारंटी है, और अधिकांश व्यावहारिक कार्य आदिम पुनरावृत्ति से परे नहीं जाते हैं।