एक पुरानी, अच्छी तरह से ज्ञात समस्या पर विचार करें :
गणित में, दो या अधिक गैर-शून्य पूर्णांक का सबसे बड़ा सामान्य भाजक (gcd) ... सबसे बड़ा धनात्मक पूर्णांक है जो शेष संख्या के बिना संख्याओं को विभाजित करता है।
Gcd की परिभाषा आश्चर्यजनक रूप से सरल है:
जहां mod modoo ऑपरेटर है (जो पूर्णांक विभाजन के बाद शेष है)।
अंग्रेजी में, इस परिभाषा किसी भी संख्या का सबसे बड़ा आम भाजक कहते हैं और शून्य कि संख्या, और दो संख्याओं का सबसे बड़ा आम भाजक है हूँ और एन की सबसे बड़ा आम भाजक है n और विभाजित करने के बाद शेष मीटर से n ।
यदि आप जानना चाहते हैं कि यह क्यों काम करता है, तो यूक्लिडियन एल्गोरिथ्म पर विकिपीडिया लेख देखें ।
उदाहरण के तौर पर gcd (10, 8) की गणना करते हैं। प्रत्येक चरण इसके ठीक पहले वाले के बराबर है:
- gcd (10, 8)
- gcd (10, 10 mod 8)
- gcd (8, 2)
- gcd (8, 8 मॉड 2)
- gcd (2, 0)
- 2
पहले चरण में, 8 शून्य के बराबर नहीं है, इसलिए परिभाषा का दूसरा भाग लागू होता है। 10 मॉड 8 = 2 क्योंकि 8 2 के शेष के साथ एक बार 10 में चला जाता है। चरण 3 में, दूसरा भाग फिर से लागू होता है, लेकिन इस बार 8 मॉड 2 = 0 क्योंकि 2 8 शेष के साथ विभाजित करता है। चरण 5 पर, दूसरा तर्क 0 है, इसलिए उत्तर 2 है।
क्या आपने देखा कि समान चिह्न के बाएँ और दाएँ दोनों तरफ gcd दिखाई देता है? एक गणितज्ञ यह कहेगा कि यह परिभाषा पुनरावर्ती है क्योंकि आप अपनी परिभाषा के अंदर पुनरावृत्ति को परिभाषित कर रहे हैं ।
पुनरावर्ती परिभाषाएँ सुरुचिपूर्ण होती हैं। उदाहरण के लिए, किसी सूची के योग के लिए एक पुनरावर्ती परिभाषा है
sum l =
if empty(l)
return 0
else
return head(l) + sum(tail(l))
जहां head
एक सूची में पहला तत्व tail
है और बाकी सूची में है। ध्यान दें कि sum
अंत में इसकी परिभाषा के अंदर पुनरावृत्ति होती है।
शायद आप इसके बजाय किसी सूची में अधिकतम मूल्य पसंद करेंगे:
max l =
if empty(l)
error
elsif length(l) = 1
return head(l)
else
tailmax = max(tail(l))
if head(l) > tailmax
return head(l)
else
return tailmax
आप गैर-ऋणात्मक पूर्णांकों के गुणन को पुनरावर्ती रूप से परिवर्धन की श्रृंखला में बदलने के लिए परिभाषित कर सकते हैं:
a * b =
if b = 0
return 0
else
return a + (a * (b - 1))
यदि जोड़-घटाव की श्रृंखला में गुणा को बदलने का कोई मतलब नहीं है, तो यह देखने के लिए कुछ सरल उदाहरणों का विस्तार करने का प्रयास करें कि यह कैसे काम करता है।
मर्ज सॉर्ट की एक सुंदर पुनरावर्ती परिभाषा है:
sort(l) =
if empty(l) or length(l) = 1
return l
else
(left,right) = split l
return merge(sort(left), sort(right))
पुनरावर्ती परिभाषाएँ चारों ओर हैं यदि आप जानते हैं कि क्या देखना है। ध्यान दें कि इन सभी परिभाषाओं में बहुत सरल आधार मामले हैं, उदाहरण के लिए , जीडीसी (एम, 0) = एम। पुनरावर्ती मामले आसान जवाब के लिए नीचे उतरने के लिए समस्या को दूर कर देते हैं।
इस समझ के साथ, आप अब पुनरावर्तन पर विकिपीडिया के लेख में अन्य एल्गोरिदम की सराहना कर सकते हैं !