অন্যরা যেমন উল্লেখ করেছে, পুনরাবৃত্তি বিশ্লেষণ করা খুব দ্রুত খুব দ্রুত পেতে পারে। এই জাতীয় জিনিসটির আরও একটি উদাহরণ এখানে দেওয়া হয়েছে: http://rosettacode.org/wiki/Mutual_recursion http://en.wikedia.org/wiki/Hofstadter_sequence#Hofstadter_Female_and_Male_sequferences
এগুলির জন্য একটি উত্তর এবং চলমান সময় গণনা করা শক্ত। এটি "কঠিন ফর্ম" থাকার এই পারস্পরিক পুনরাবৃত্ত ক্রিয়াকলাপগুলির কারণে।
যাইহোক, আসুন এই সহজ উদাহরণটি দেখুন:
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 দ্বারা অনুপ্রাণিত , যা নিজে নিজেই পড়া ভাল, আসুন দেখে নেওয়া যাক: "" "ফিবোনাকির সংখ্যাগুলি পারস্পরিক পুনরাবৃত্তির মাধ্যমে ব্যাখ্যা করা যেতে পারে: এফ (0) = 1 এবং জি (0) ) = 1, এফ (এন + 1) = এফ (এন) + জি (এন) এবং জি (এন + 1) = এফ (এন) দিয়ে। "" "
তো, এফের রানটাইম কত? আমরা অন্য পথে যেতে হবে।
ভাল, আর (এফ (0)) = 1 = এফ (0); আর (জি (0)) = 1 = জি (0)
এখন আর (এফ (1)) = আর (এফ (0)) + আর (জি (0)) = এফ (0) + জি (0) = এফ (1)
...
আর (এফ (এম)) = এফ (এম) দেখতে অসুবিধা হয় না - উদাহরণস্বরূপ আমি সূচীতে একটি ফিবোনাকি নম্বর গণনা করতে প্রয়োজনীয় ফাংশন কলগুলির সংখ্যা একটি ফিবোনাকির সংখ্যার মানের সমান? সূচীতে i। এটি ধরে নিয়েছে যে দুটি সংখ্যা একসাথে যুক্ত করা একটি ফাংশন কলের চেয়ে অনেক দ্রুত। যদি এটি না হয়, তবে এটি সত্য হবে: আর (এফ (1)) = আর (এফ (0)) + 1 + আর (জি (0)), এবং এর বিশ্লেষণ আরও জটিল হত, সম্ভবত একটি সহজ বদ্ধ ফর্ম সমাধান ছাড়াই।
ফিবোনাচি সিকোয়েন্সের জন্য বদ্ধ ফর্ম পুনরায় উদ্ভাবন করা অগত্যা সহজ নয়, আরও কয়েকটি জটিল উদাহরণ উল্লেখ না করে।