दिलचस्प पोस्ट
क्या html_entity_decode पर ENT_HTML5, ENT_HTML401, … संशोधक क्या करते हैं? एपीआई 23 में सामान्य अनुमतियां और खतरनाक अनुमतियों की एंड्रॉइड अनुमतियों की सूची है? एसक्यूएल: बनाम <= और> = कैसे अलग आकार और रंग के साथ एक ggplot2 उपशीर्षक जोड़ने के लिए? हार्डकोड स्ट्रिंग "पंक्ति तीन", @ स्ट्रिंग संसाधन का उपयोग करना चाहिए iOS 9 सुरक्षित पृष्ठ से असुरक्षित संसाधन लोड नहीं करता (SSL / HTTPS) आर में संयोजन और क्रमचय की गणना कैसे करें? सी # SmtpClient का उपयोग करते हुए इनलाइन छवियों के साथ मेल भेजना .serialize () और .serializeArray () के बीच क्या अंतर है? क्या git द्विआधारी अंतर एल्गोरिदम (डेल्टा स्टोरेज) मानकीकृत है? String.Format StringBuilder के रूप में कुशल है उपयोगकर्ता समूह और अनुमतियां मैं स्ट्रिंग में एक बैकस्लैश (\) कैसे लिखूं? क्या प्रोटोकॉल बफर के लिए सी + + समकक्ष जावा में I / O फ़ंक्शंस को सीमांकित करता है? ऑफ़लाइन सर्वर पर npm -g को कैसे स्थापित करें

मैं अजगर में रिकर्सिव फ़ंक्शन कैसे बना सकता हूं?

मैं अजगर में रिकर्सिव फ़ंक्शन कैसे बना सकता हूं?

Solutions Collecting From Web of "मैं अजगर में रिकर्सिव फ़ंक्शन कैसे बना सकता हूं?"

मैं सोच रहा हूँ कि क्या आप "पुनरावर्ती" का मतलब है तथ्यात्मक कार्य की गणना करने के लिए यहां एक पुनरावर्ती समारोह का एक सरल उदाहरण है:

def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) 

रिकर्सिव एल्गोरिदम के दो मुख्य तत्व हैं:

  • समाप्ति स्थिति: n == 0
  • कटौती चरण जहां फ़ंक्शन प्रत्येक बार छोटी संख्या के साथ स्वयं कहता है: factorial(n - 1)

अजगर में पुनरावर्ती एक अन्य भाषा में पुनरावर्ती के रूप में कार्य करता है, जिसमें स्वयं के संदर्भ में रिकर्सिव निर्माण परिभाषित किया गया है:

उदाहरण के लिए एक रिकर्सिव वर्ग द्विआधारी पेड़ (या किसी पेड़) हो सकता है:

 class tree(): def __init__(self): '''Initialise the tree''' self.Data = None self.Count = 0 self.LeftSubtree = None self.RightSubtree = None def Insert(self, data): '''Add an item of data to the tree''' if self.Data == None: self.Data = data self.Count += 1 elif data < self.Data: if self.LeftSubtree == None: # tree is a recurive class definition self.LeftSubtree = tree() # Insert is a recursive function self.LeftSubtree.Insert(data) elif data == self.Data: self.Count += 1 elif data > self.Data: if self.RightSubtree == None: self.RightSubtree = tree() self.RightSubtree.Insert(data) if __name__ == '__main__': T = tree() # The root node T.Insert('b') # Will be put into the left subtree T.Insert('a') # Will be put into the right subtree T.Insert('c') 

जैसा कि पहले ही उल्लेख किया गया है कि रिकर्सिव संरचना में एक समाप्ति स्थिति होनी चाहिए। इस वर्ग में, यह इतना स्पष्ट नहीं है क्योंकि यह केवल दोहराता है अगर नए तत्व जोड़े जाते हैं, और केवल एक ही समय अतिरिक्त होता है

यह भी ध्यान देने योग्य है कि, अजगर के रूप में डिफ़ॉल्ट रूप से उपलब्ध रिकर्सन की गहराई तक सीमित है, ताकि कंप्यूटर की सभी स्मृति को अवशोषित न करें। मेरे कंप्यूटर पर यह 1000 है। मुझे नहीं पता कि यह हार्डवेयर के आधार पर बदलता है, आदि। तुम्हारा देखने के लिए:

 import sys sys.getrecursionlimit() 

और इसे सेट करने के लिए:

 import sys #(if you haven't already) sys.setrecursionlimit() 

संपादित करें: मैं यह नहीं बता सकता कि मेरी द्विआधारी पेड़ सबसे कुशल डिजाइन है अगर कोई इसे सुधार सकता है, तो मुझे यह सुनकर खुशी होगी कि कैसे

मान लें कि आप बनाना चाहते हैं: u (n + 1) = f (u (n)) के साथ u (0) = u0

एक समाधान एक साधारण पुनरावर्ती समारोह को परिभाषित करना है:

 u0 = ... def f(x): ... def u(n): if n==0: return u0 return f(u(n-1)) 

दुर्भाग्य से, यदि आप यू के उच्च मूल्यों की गणना करना चाहते हैं, तो आप एक स्टैक अतिप्रवाह त्रुटि में चले जाएंगे।

एक अन्य समाधान एक सरल लूप है:

 def u(n): ux = u0 for i in xrange(n): ux=f(ux) return ux 

लेकिन यदि आप n के विभिन्न मानों के लिए यू के कई मान चाहते हैं, तो यह उप-परिक्रम है आप एक सरणी में सभी मानों को कैश कर सकते हैं, लेकिन आप मेमोरी त्रुटि से बाहर हो सकते हैं। आप इसके बजाय जनरेटर का उपयोग करना चाह सकते हैं:

 def u(n): ux = u0 for i in xrange(n): ux=f(ux) yield ux for val in u(1000): print val 

कई अन्य विकल्प हैं, लेकिन मुझे लगता है कि ये मुख्य हैं

रिकर्सिव फ़ंक्शन का उदाहरण:

 def recursive(string, num): print "#%s - %s" % (string, num) recursive(string, num+1) 

इसके साथ चलाएं:

 recursive("Hello world", 0)