আমি পগৌর এবং রিকার্ভের সাথে একমত, পুনরাবৃত্ত-ফাইবোনাকির জটিলতা হ'ল (2 ^ n)।
আমি বরং একটি সরলবাদী দ্বারা একই সিদ্ধান্তে পৌঁছেছি তবে আমি এখনও বৈধ যুক্তি বিশ্বাস করি।
প্রথমত, এনটিথ ফাইবোনাকির সংখ্যা গণনা করার সময় এটি কতবার পুনরাবৃত্ত ফাইবোনাকির ফাংশন (এফ () থেকে ডেকে নিয়ে যায় তা নির্ধারণের সমস্ত বিষয়। যদি এটি 0 থেকে n এর অনুক্রমে একবারে সংখ্যায় একবার কল হয়, তবে আমাদের কাছে O (n) থাকে, যদি এটি প্রতিটি সংখ্যার জন্য n বার বলা হয়, তবে আমরা O (n * n), বা O (n ^ 2) পাই, ইত্যাদি।
সুতরাং, যখন F () কে একটি সংখ্যার জন্য আহ্বান করা হয়, 0 এবং n-1 এর মধ্যে একটি প্রদত্ত সংখ্যার জন্য F () বার বলা হয় আমরা 0 এর নিকটবর্তী হওয়ার সাথে সাথে বৃদ্ধি পায়।
প্রথম ধারণা হিসাবে, আমার কাছে এটি মনে হয় যে আমরা যদি এটি ভিজ্যুয়াল উপায়ে রাখি, প্রতি সময়কালে একটি ইউনিট আঁকলে F () একটি নির্দিষ্ট সংখ্যার জন্য ডাকা হয়, ভেজা পান পিরামিড আকৃতির এক প্রকারের (যদি আমরা ইউনিটগুলিকে অনুভূমিকভাবে কেন্দ্র করি তবে )। এটার মতো কিছু:
n *
n-1 **
n-2 ****
...
2 ***********
1 ******************
0 ***************************
এখন, প্রশ্নটি হল, এই পিরামিডের গোড়াটি এন বাড়ার সাথে সাথে কতটা দ্রুত বাড়ছে?
আসুন একটি আসল কেস নেওয়া যাক, উদাহরণস্বরূপ F (6)
F(6) * <-- only once
F(5) * <-- only once too
F(4) **
F(3) ****
F(2) ********
F(1) **************** <-- 16
F(0) ******************************** <-- 32
আমরা দেখতে পাচ্ছি যে এফ (0) 32 বার কল হয়ে যায়, এটি 2 ^ 5, যা এই নমুনা ক্ষেত্রে 2 ^ (এন -1) হয়।
এখন, আমরা জানতে চাই যে F (x) কতবার কল হয় এবং আমরা দেখতে পাচ্ছি যে F (0) নাম্বারটি কতবার ডাকা হয় এটি কেবল তারই একটি অংশ।
যদি আমরা মানসিকভাবে F * (6) থেকে F (2) লাইনগুলিকে F (1) লাইনে স্থানান্তরিত করি তবে আমরা দেখতে পাচ্ছি যে F (1) এবং F (0) রেখা এখন দৈর্ঘ্যে সমান equal যার অর্থ, n = 6 2x32 = 64 = 2 ^ 6 হলে মোট বার F () কল হয়।
জটিলতার ক্ষেত্রে এখন:
O( F(6) ) = O(2^6)
O( F(n) ) = O(2^n)