जैसा कि दूसरों ने बताया, पुनरावृत्ति का विश्लेषण बहुत तेजी से बहुत कठिन हो सकता है। ऐसी चीज़ का एक और उदाहरण यहां दिया गया है: http://rosettacode.org/wiki/Mutual_recursion http://en.wikipedia.org/wiki/Hofstadter_fterence#Hofstadter_Femont_and_M___
इस कारण से इनका उत्तर देना मुश्किल है। यह इन पारस्परिक-पुनरावर्ती कार्यों के कारण है "कठिन रूप"।
किसी भी तरह, आइए इस आसान उदाहरण को देखें:
http://pramode.net/clojure/2010/05/08/clojure-trampoline/
(declare funa funb)
(defn funa [n]
(if (= n 0)
0
(funb (dec n))))
(defn funb [n]
(if (= n 0)
0
(funa (dec n))))
चलो गणना करने की कोशिश करके शुरू करते हैं funa(m), m > 0
:
funa(m) = funb(m - 1) = funa(m - 2) = ... funa(0) or funb(0) = 0 either way.
रन-टाइम है:
R(funa(m)) = 1 + R(funb(m - 1)) = 2 + R(funa(m - 2)) = ... m + R(funa(0)) or m + R(funb(0)) = m + 1 steps either way
अब चलो एक और, थोड़ा और अधिक जटिल उदाहरण चुनें:
Http://planetmath.org/encyclopedia/MutualRecursion.html से प्रेरित होकर , जो स्वयं एक अच्छा पढ़ा हुआ है, आइए देखें: "" फाइबोनैचि संख्याओं की व्याख्या पारस्परिक पुनरावृत्ति के माध्यम से की जा सकती है: F (0) = 1 और G (0) ) = 1, F (n + 1) = F (n) + G (n) और G (n + 1) = F (n) के साथ। "" "
तो, F का रनटाइम क्या है? हम दूसरे रास्ते से जाएंगे।
खैर, आर (एफ (0)) = 1 = एफ (0); R (G (0)) = 1 = G (0)
अब R (F (1)) = R (F (0)) + R (G (0)) = F (0) + G (0) = F (1)
...
यह देखना मुश्किल नहीं है कि R (F (m)) = F (m) - उदाहरण के लिए, फंक्शन की संख्या की आवश्यकता सूचकांक में एक फाइबोनैचि संख्या की गणना करने के लिए I एक फाइबोनैचि संख्या के मान के बराबर है सूचकांक में मैं। यह माना जाता है कि एक फ़ंक्शन कॉल की तुलना में दो संख्याओं को एक साथ जोड़ना बहुत तेज है। यदि यह मामला नहीं था, तो यह सच होगा: आर (एफ (1)) = आर (एफ (0)) + 1 + आर (जी (0)), और इस का विश्लेषण अधिक जटिल होता, संभवतः एक आसान बंद फॉर्म समाधान के बिना।
फाइबोनैचि अनुक्रम के लिए बंद किया गया फॉर्म आवश्यक रूप से सुदृढ़ करना आसान नहीं है, कुछ अधिक जटिल उदाहरणों का उल्लेख नहीं करना।