سری فیبوناچی بازگشتی

دنباله فیبوناچی در تحلیل تکنیکال
روش دیگر برای مشخص کردن قیمتهای هدف استفاده از درصدهای بازگشت میباشد. معمولترین و رایجترین این اعداد و درصدها در تحلیل %38 ، %50 و 61.8% میباشد. قیمت معمولاً به اندازۀ درصد یا مقدار قابل پیش بینی شدهای تصحیح مییابد که درصدها 50، 33 و 67 درصد میباشد. دنباله فیبوناچی این اعداد را تعدیل کرده است. در روندهای پر قدرت کمترین میزان تصحیح 38% خواهد بود. در روند ضعیفتر بیشترین درصد تصحیح 62% میباشد.
نسبت اعداد فیبوناچی بعد از 4 عدد اولیه برابر 0.618 میباشد. سه نسبت اول (1/1=%100) ، (1/2=%50) و (2/3=%67) میباشد. بسیاری از تحلیلگران مباحث الیوت ممکن است متوجه نباشند که خط معروف 50% در درصدهای تصحیح یک نسبت فیبوناچی یعنی 2/3 است. بازگشت کامل (100%) به سطح بازار افزایشی یا کاهشی قبلی نیز باید بهعنوان یک منطقۀ حمایت یا مقاومت مهم مورد توجه قرار گیرد.
شکل بالا سه خط افقی سطوح بازگشتی فیبوناچی را نشان میدهد که میزان 50، 38 و 62 درصد از طول روند مربوط در فاصله ی زمانی تعیین شده محاسبه شده است. در زمانی که قیمت به خط 38% برخورد کرده و متوقف شده است. این شکل تصحیح روند قیمت را با استفاده از دنباله fibonacci نشان می دهد.
هدفهای زمانی فیبوناچی
فیبوناچی درباره ی ارتباطات زمانی نیز کاربرد دارد. اما چون پیشبینی کردن با این روش مشکلتر ازریابی میشود از نظر بعضی از تحلیلگران الیوت اهمیت کمتری نسبت به دو جنبه ی دیگر این نظریه دارد. هدفهای زمانی فیبوناچی به معنای محاسبه ی زمان وقوع نقاط مهم سقف یا کف قیمت بعدی میباشد . تحلیلگر باید در نمودار روزانه تعداد روزهای معاملاتی را از نقطه ی مهم چرخشی بازار ، با این توقع که نقاط سقف یا کف بعدی در روزهای منطبق با اعداد فیبوناچی یعنی در روزهای سیزدهم، بیست و یکم، سی و چهارم، پنجاه و پنجم و هشتاد و نهم اتفاق خواهند افتاد ،بشمرد. همین تکنیک را در نمودار هفتگی یا ماهانه و حتی سالیانه نیز میتوان مورد استفاده قرار داد. در نمودار هفتگی تحلیلگر هدفهای زمانی وقوع سقف یا کفهای مهم را بر طبق هفتههای متناسب با اعداد فیبوناچی مشخص میکند.
بررسی مشکل دنباله فیبوناچی در تحلیل بازار
بررسی نمودارهای قیمت در هر دو بازار سرمایه و بازار معاملات امن، ارتباطات زمانی فیبوناچی را آشکار میکنند. اما یک مشکل وجود دارد و آن امکان تفاوت در انواع ارتباطات میباشد. هدفهای زمانی فیبوناچی را میتوان از نقطه ی سقف تا سقف،کف تا کف،سقف تا کف و کف تا سقف به دست آورد. اما معلوم نیست که کدام یک از ارتباطات مذکور میتواند برای روند جاری مناسب باشد.
جمع بندی مطالب
اکنون به طور مختصر نکات مهم ادنیکاتور دنباله فیبوناچی را بررسی می کنیم:
- سری اعداد فیبوناچی پایه و اساس ریاضیاتی نظریه ی موج الیوت هستند.
- تعداد موجها بر طبق اعداد fibonacci است.
- نسبتها و درصدهای بازگشتی فیبوناچی برای تعیین کردن قیمتهای هدف به کار میرود. معمولترین درصدهای بازگشتی 62% ، 50% و 38% است.
- قانون تناوبی این نکته را متذکر میشود که در یک رشته یا توالی انتظار دو رخداد یکسان نداشته باشید.
- روند کاهشی قیمت (یا تصحیحی) نمیبایست از کف چهارم پایینتر بیاید.
- موج چهارم نباید با موج یکم همپوشانی ایجاد کند.
- این نظریه در اصل برای شاخصهای بازار سرمایه به کار میرود و برای بازار یک بازار اختصاصی کاربرد مناسبی ندارد.
- بهترین کاربرد این نظریه در بازارهای کالا که عمومیت زیادی دارند مانند بازار طلا میباشد.
اصول نظریه موج الیوت بر پایه ی روشهای کلاسیک همانند نظریه ی داو و سری فیبوناچی بازگشتی الگوهای نموداری بنا شده است. اکثر الگوهای قیمت میتواند در بخشی از ساختار نظریه موج الیوت بیان شوند. کاربرد نسبتها و درصدهای بازگشتی فیبوناچی در مبحث مربوط به (هدف های نوسانی) میباشد. نظریه ی موج الیوت همه ی این عوامل را در بررسی به کار میبرد و از آنها برای افزایش توانایی پیشبینی فرد تحلیلگر استفاده میکند.
فیبوناچی و انواع آن
عدد فی از سری فیبوناچی بدست می آید به این صورت که از تقسیم کردن هر عدد به عدد قبلی به عدد 1.618 میرسیم که به عدد فی معروف است .
3.عجایب عدد فی
جالب این است که در طبیعت با این همه گستردگی نظم خاصی در بسیاری عناصر میتوان یافت که یک سری از آنها با عدد فی رابطه دارند به طور مثال:
- دانه های آفتابگردان طوری رشد میکنند که حاصل تقسیم قطر هر مارپیچ به مارپیچ بعدی 1.618 میشود
- نسبت طول وعرض خال های پروانه عدد پی هست
- در مارپیچ های حلزون و کهکشان های مارپیچ نسبت قطر مارپیچ 1.618 هست.
- و خیلی از موارد دیگر را در طبیعت میتوان یافت که با نسبت عدد فی وجود دارند مثل اعضای بدن انسان، مارپیچ های دی ان ای ، گیاهان و…
- فیبوناچی در تحلیل تکنیکال
جالب تر آنکه در بازار های مالی که حرکات قیمت با تجمیع نظر معامله گرها به وجود می آید شاهد آن هستیم که عدد فی و همچنین اعداد دیگری که از سری فیبوناچی بدست می آیند کاربرد فراوانی دارد که در این مقاله قصد داریم به بررسی آنها بپردازیم.
در بازار سرمایه سطوح فیبوناچی سطوحی هستند که در نقش حمایت ها و مقاومت ها در مسیر قیمت وجود دارند که قیمت در میان آنها در حال حرکت هست.
- سطوح فیبوناچی مهم در تحلیل تکنیکال
61.8 که از تقسیم هر عدد سری فیبوناچی به عدد بعدی بدست می آید.
38.2 که از تقسیم هر عدد سری فیبوناچی به دو عدد بعدی بدست می آید.
23.6 که از تقسیم هر عدد سری فیبوناچی به سه عدد بعدی بدست می آید.
161.8 که از تقسیم هر عدد سری فیبوناچی به عدد قبلی بدست می آید.
توجه بفرمایید که هر چه از اعداد بزرگتر سری فیبوناچی برای بدست آوردن سطوح قیبوناچی استفاده کنیم به اعداد دقیق تری خواهیم رسید.( از عدد سیزدهم به بعد استفاده کنید برای تحلیل ها کفایت میکند )
- انواع ابزار های فیبوناچی در تجلیل تکنیکال
فیبوناچی اصلاحیRET (Fibonacci Retracement)
فیبوناچی گسترشیEXT (Fibonacci Extension)
فیبوناچی انبساطیEXP (Fibonacci Expansion)
فیبوناچی پروجکشن PRO( Fibonacci Projection)
فیبوناچی باد بزن FAN(Fibonacci fan)
فیبوناچی زمانیTIME (Fibonacci time)
در یک روند صعودی، روند این طور نیست که همیشه صعودی باشد و نیاز به اصلاح در بین مسیر دارد، ما در فیبوناچی اصلاحی سطوحی را میتوانیم پیدا کنیم که در آنها این احتمال وجود دارد که اصلاح موج صعودی به پایان برسد و ادامه صعود را داشته باشیم و برعکس در موج نزولی
مهمترین سطوح اطلاحی: 23.6 درصد ، 38.2 درصد ، 61.8 درصد ،78.6 درصد
سطح 50 و100 درصد جز اعداد فیبوناچی نیست ولی تحلیلگران آن سطح هم در نظر میگیرند
اصلاحات تا 100 درصد در این نوع فیبوناچی قرار دارند ولی اصلاحات بیشتر از 100 درصد را اکستنشن یا گسترشی میگوییم.
برای رسم این ابزار یک موج صعودی پیدا کرده و کف موج را به سقف موج وصل میکنیم و در موج نزولی به عکس میشود یعنی سقف را به کف وصل میکنیم.
مثال1: در نماد فولاد که شاهد واکنش به سطح فیبو 50 درصد هستیم
مثال2: نماد وغدیر
در اصلاح های بالای 100 درصد یک روند با کمک فیبو گسترشی یا اکستنشن یا بازگشتی خارجی سطوحی را پیدا میکنیم که امکان بازگشت قیمت وجود داشته باشد
در فیبو اکستنشن سطوح 127.2 ، 141.4 ، 161.8 ، 200 ، 261.8 و 423.6 حائز اهمیت است
روش ترسیم فیبوناچی گسترشی همانند فیبوناچی اصلاحی عمل میکنیم (در روند صعودی کف موج را به سقف موج وصل میکنیم) و فقط سطوح بالای 100 درصد را در نظر میگیریم
مثال: در نماد های وب واکنش را نسبت به سطح 1.618 میتوانید مشاهده کنید
این ابزار بسیار شبیه فیبوناچی پروجکشن هست و برای بدست آوردن اهداف قیمتی بعد از شکست سقف یا کف را نشان میدهد و تفائت آن با فیبو پروجکشن در ترسیم آن است که در فیبو پروجکشن از سه نقطه استفاده میکنیم ولی در فیبو انبساطی از دو نقطه کمک مگیریم
برای رسم فیبوناچی انبساطی در روند صعودی که اصلاحی داشته و ما اهداف قیمتی را میخواهیم داشته باشیم با وصل کردن کف به سقف قیمت اهداف را بدست می آوریم.
مثال: در نماد سیمرغ واکنش ها را نسبت به سطوح 1.618 و 2.618 میتوانید مشاهده مکنید.
فیبوناچی پروجکشن برخلاف ابزار های بالا که دو نقطه ای بودند برای ترسیم آن نیاز به سه نقطه داریم و برای بدست آوردن اهداف قیمتی به کار برده میشود به این صورت که اگر یک صعود داشته باشیم و بعد از آن یک اصلاح با کمک این ابزار میتوان اهداف قیمتی را بعد از اصلاح داشته باشیم.
برای ترسیم فیبو پروجکشن در یک روند صعودی که یک اصلاح داشته به این صورت رسم میکنیم که یک کف و بعد یک سقف و درآخر انتهای اصلاح را انتخاب میکنیم تا فیبو پروجکشن رسم گردد.
مثال: در نماد فملی فیبوباچی در سطوح 1.618 و 2.618 اهداف قیمتی را مشخص کرده که نمودار نسبت به آنها واکنش نشان داده است.
در فیبوناچی فن یکسری نقاط حمایت و مقاومتی را در طی یک روند میتوان پیدا کرد و معمولا برای تشخیص برگشت روند بسیار کارا هستند
برای رسم آن در یک روند صعودی یک کف و سقف را انتخاب میکنیم.
مثال: در نماد دماوند که کف Aرا به سقف B متصل کردیم و واکنش های نمودار قیمت را به خط ½ را شاهد هستیم.
در فیبوناچی زمانی خطوط عمودی داریم که در آن زمان ها نمودار قیمت مستعد آن هست که تغییر روند دهد.
برای ترسیم آن دو پیوت(نقاطی که در آنها روند تغییر جهت داشته) را روی نمودار مشخص کرده و با کمک آن دو پیوت فیبوناچی زمانی را ترسیم میکنیم و تفاوتی نمیکند که پیوت ها دره یا قله باشند و هر چه پیوت ها اصلی تر باشند نتیجه بهتری میگیریم.
مثال: در شاخص کل بورس تهران با اتصال نقطه A به B شاهد واکنش شاخص به سطوح فیبوناچی زمانی هستیم.
آموزش فیبوناچی در تحلیل تکنیکال
سری فیبوناچی دنباله ای از اعداد است که هر عدد از مجموع دو عدد قبلی خود بدست می آید این دنباله بصورت زیر است.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, …
شاید در نگاه اول این سری چیز خاصی نداشته باشد! اما آنچه دنباله فیبوناچی را مشهور کرده است نسبت هایی است که اعداد این دنباله با یکدیگر دارند که مهمترین آن، نسبت هر عدد از این دنباله به عدد قبلی خود است و هر چه این عمل را برای جملات جلوتر این سری انجام دهیم این نسبت به یک عدد ثابت همگرا میشود. برای مثال در سری فیبوناچی، اعداد 20، 21 و 22 اُم به ترتیب عبارت است از: 6765، 10946، 17711 حال اگر هر عدد را به عدد قبلی خود تقسیم کنیم به جواب زیر میرسیم و همانطور که مشاهده میکنید تا رقم هفتم اعشار آن یکی است!
17711/10946 = 1.61803398
10946/6765 = 1.سری فیبوناچی بازگشتی 61803399
عدد 1.618 را نسبت طلایی یا همان Golden Ratio میگویند و شاید بتوان مهم ترین عدد در دنیا دانست! (عدد طلایی یک عدد گنگ و برابر است با 2/(5√+1)) خدا عاشق عدد 1.618 است! چرا که میتوانید این نسبت را در تمام مخلوقاتش پیدا کنید! از جزء به جزء بدن خودتان بگیرید تا الگوی مارپیچی حلزون، گل آفتابگردان و کهکشان ها، بگذریم! خدا روح مرحوم فیبوناچی را قرین شادی و رحمت کند! و به قول حضرت حافظ:
- خیز تا بر کِلکِ آن نقاش، جانافشان کنیم
- کاین همه نقشِ عجب در گردشِ پرگار داشت
کاربرد فیبوناچی در تحلیل تکنیکال
نسبت های فیبوناچی کاربرد زیادی در بازارهای مالی دارند و بررسی واکنش معامله گران نسبت به این اعداد در بحث حمایت و مقاومت باعث بهبود موفقیت در معاملات میشود. “هیچ قطعیتی در تحلیل تکنیکال وجود ندارد” استفاده از ابزارهای فیبوناچی در کنار سایر ابزارهای تحلیل تکنیکال و تطابق آنها با یکدیگر صرفا میتواند سری فیبوناچی بازگشتی باعث افزایش کارایی و کاهش تردید در تحلیل شود.
نسبت های مهم فیبوناچی
- 423.8% : از تقسیم هر عدد سری به سومین عدد قبل از خود بدست می آید.
- 261.8% : از تقسیم هر عدد سری به دومین عدد قبل از خود بدست می آید.
- 161.8% : از تقسیم هر عدد سری به عدد قبلی خود بدست می آید.
- 78.6% : جذر عدد 61.8 است!
- 61.8% : از تقسیم هر عدد سری به عدد بعدی خود بدست می آید.
- 38.2% : از تقسیم هر عدد سری به دومین عدد بعد از خود بدست می آید.
- 23.6% : از تقسیم هر عدد سری به سومین عدد بعد از خود بدست می آید.
تذکر: نسبت های 50% و 100% و 200% جزء نسبت های فیبوناچی نیستند اما هنگام تحلیل مورد استفاده قرار میگیرند!
ابزارهای مهم فیبوناچی در تحلیل تکنیکال
در بحث خطوط روند و حمایت و مقاومت، واکنش بازار به قیمت های گذشته این خطوط را بوجود می آورد و انتظار بازار، واکنش دوباره به آنها بود! اما با استفاده از ابزارهای فیبوناچی میتوان یک خط، منحنی و یا زمان خاص برای بازگشت یا ادامه دار بودن یک روند را ترسیم کرد که هیچ اجباری به حمایت و مقاومت بودن آنها نیست و صرفا بحث روانی دارد و استفاده از آنها بایستی به عنوان ابزار کمکی تحلیل تکنیکال و همراه با سایر ابزارها باشد و همپوشانی سطوح فیبوناچی با الگوهای قیمتی، خطوط حمایت و مقاومت، خط روند و… باعث افزایش اعتبار آنها خواهد شد و میتوان واکنش جدی تر بازار را انتظار داشت. در ادامه سعی میکنیم توضیح مختصری پیرامون ابزارهای فیبوناچی خدمت شما ارائه کنیم و در مقالات بعدی بصورت مجزا هر کدام از این ابزارها را همراه با مثال های عملی از بورس و سایر بازارهای مالی مورد بررسی قرار دهیم.
- ریتریسمنت (Fibonacci Retracement)
- اکستنشن (Fibonacci Extension)
- پروجکشن (Fibonacci Projection)
- اکسپنشن (Fibonacci Expansion)
- کمان ها (Fibonacci arcs)
- بادبزن (Fibonacci Fan)
- فیبوناچی زمانی
فیبوناچی ریتریسمنت (اصلاحی – داخلی)
قیمت ها در بازارهای مالی عموما بصورت ناگهانی با افزایش و یا کاهش مواجه نمیشوند و همواره روندها تمایل به اصلاح قیمت دارند برای مثال در یک روند صعودی قیمت سهام از 1000 تا 2000 افزایش پیدا میکند سپس تا 1700 کاهش و دوباره روند صعودی از سر گرفته میشود این اصلاح قیمت در روندهای نزولی نیز با افزایش قیمت ها رخ میدهد. اینکه این اصلاح قیمت تا چه سطحی رخ میدهد توسط سطوح فیبوناچی اصلاحی (بازگشتی) قابل شناسایی است بدین صورت که با شناسایی یک روند، نقاط سقف و کف قیمت آن را به یکدیگر وصل میکنیم که به عنوان سطوح 100% و 0% درنظر گرفته میشود سپس سطوح 23.6%، 38.2%، 50%، 61.8% و 78.6% بین دو سطح 0% و 100% به عنوان خطوط اصلاحی احتمالی ترسیم میشود.
فیبوناچی اکستنشن (اصلاحی – خارجی)
در فیبوناچی بازگشتی – داخلی سطوح اصلاح همگی کمتر از 100% بودند یعنی در یک روند صعودی اصلاح قیمت کمتر از کف قیمتی نمیشد حال اگر اصلاح، اعدادی بالاتر از 100% را تجربه کند به آن فیبوناچی اکستنشن یا همان بازگشتی – خارجی میگویند و سطوح بازگشتی احتمالی به ترتیب 127.2%، 161.8%، 261.8% و 423.6% هستند.
فیبوناچی پروجکشن
پروجکشن به معنای تصویر کردن است و از این ابزار برای تعیین اهداف قیمتی در آینده استفاده میشود فرض کنید در یک روند صعودی قیمت از نقطه A تا B افزایش داشته سپس با کاهش قیمت تا نقطه C سری فیبوناچی بازگشتی فاز اصلاحی خود را پشت سر گذاشته و دوباره روند صعودی خود را شروع کرده باشد حال میتوان اهداف قیمتی جدید را با استفاده از فیبوناچی پروجکشن شناسایی کرد بدین صورت که سه نقطه کف قیمت، سقف قیمت و پایان اصلاح را به یکدیگر وصل میکنیم تا سطوح 100%، 127.2%، 161.8% و 200% به عنوان اهداف احتمالی قیمتی در آینده ترسیم شوند.
فیبوناچی اکسپنشن
فیبوناچی انبساطی و پروجکشن تا حدودی شبیه به هم هستند و برای یافتن اهداف قیمتی بیشتر از 100% مورد استفاده قرار میگیرند تنها تفاوت در تعداد نقاط آنهاست بدین صورت که در فیبوناچی انبساطی تنها از 2 نقطه سقف و کف قیمتی استفاده میشود سپس ترازهای قیمتی 127.2%، 161.8%، 261.8% و 423.6% به عنوان اهداف احتمالی قیمت ترسیم میشوند. پس از شکست خطوط حمایت و مقاومت، تشکیل الگوهای قیمتی و … استفاده از این ابزار میتواند راهگشای معاملات جهت توقف ضرر یا شناسایی سود باشد.
فیبوناچی کمان ها
با استفاده از این ابزار میتوان کمان هایی را به عنوان سطوح حمایت و مقاومت بالقوه ترسیم کرد بدین صورت که ابتدا دو نقطه کف و سقف قیمت در یک روند را به یکدیگر وصل کنید این خط پایه به عنوان شعاع قوس اول، کمان 100% خواهد بود سپس کمان های 61.8%، 50% و 38.2% ترسیم و به عنوان سطوح اصلاحی روند درنظر گرفته میشوند.
دنباله فیبوناچی در پایتون
کاربر عزیز، شما به عنوان کاربر مهمان در وبسایت سکان آکادمی حضور دارید. برای ، به حساب کاربری تان وارد شوید.
* شما پس از ورود، مجددا به همین صفحه بر می گردید.
ورود به حساب کاربری
تو این آموزش قراره که یکم بیشتر با پایتون کار کنیم
لئوناردو فیبوناچی از ریاضیدانان مشهور قرن سیزدهم میلادی به رابطهی جالبی میان اعداد دست یافت که دنبالهی این اعداد را سری فیبوناچی نام گذاشت. در این مقاله ، برنامه فیبوناچی با پایتون به معرفی اعداد و دنبالهی فیبوناچی میپردازیم و با روشهای مختلف حل آن با زبان پایتون آشنا میشویم .
سری فیبوناچی دقیقا چیه ؟ 🤔
دنبالهی فیبوناچی یا سری فیبوناجی دنبالهای از اعداد است . در این دنباله عدد بعدی با جمع دو عدد ماقبل خود به دست میآید ، پس داریم :
بقیه اعدد نیز به همین ترتیب محاسبه میشوند .
تولید مارپیچ (Spiral)
اگر مربعهایی با این عرضها درست کنیم ، یک مارپیچ خوشگل بدست میاریم :
میبینید که مربعها چگونه در کنار هم قرار گرفتند ، با نظم خاصی که در دنبالهی فیبوناچی ظاهر شدهاند.
الگوی فیبوناچی در طبیعت یافت میشود ، برای مثال داریم :
گیاهان میتوانند سلولهای جدید را در الگوی مارپیچی تولید کنند ، مثل الگوی دانهها در شکل زیر:
یا الگوی فیبوناچی در صدف های دریایی :
دنباله فیبوناچی در طبیعت خیلی زیاد یافت میشود و کاربر فراوانی در ریاضیات و. دارد
با کمک ریاضیات میتوان دنباله فیبوناچی را به شکل زیر بنویسیم
Fn = Fn-1 + Fn-2
یعنی مقدار هر عنصر جدید را میتوان به کمک مجموع دو عنصر قبلی و طبق یک رابطهی بازگشتی نوشت .
در کد زیر دنبالهی فیبوناچی را به کمک توابع بازگشتی مینویسیم. ابتدا شرایط بازگشت را با عبارت شرطی if و با بررسی مقادیر اولیه تعریف کرده و سپس طبق روال توابع بازگشتی، مقدار تابع بازگشتی را بر اساس مقادیر قبلی به شکل جملهی nام سری فیبوناچی، تعریف میکنیم:
منظور از مقدار دهی اولیه یعنی برای عدد 0 و ۱ خود آنها را برگردانیم
خروجی را به ازای مقدار ۷ بررسی میکنیم. یعنی مقدار جملهی هفتم دنباله را محاسبه میکنیم :
که خروجی برای ما ۱۳ خواهد بود
پیچیدگی زمانی این کد به صورت (T(n) = T(n-1) + T(n-2 است . کدنویسی به روش بازگشتی موجب بروز کارهای تکراری و در نهایت باعث افزایش زمان اجرای برنامه میشود .
برای جلوگیری از تکرار محاسباتی، از روش برنامهریزی دینامیک یا پویا استفاده میکنیم . به طوری که نتیجهی عملیاتی محاسباتی را در هر مرحله در داخل یک لیست ذخیره کنیم و در صورت نیاز مجدد، آن را از لیست به دست بیاوریم . در این صورت زمان اجرای برنامه از مرتبهی خطی خواهد بود. در کد زیر محاسبهی اعداد فیبوناچی به روش برنامهنویسی پویا رو داریم :
این مفهوم ساده و پایهای کاربرد گستردهای در طبیعت و. دارد
ما میتوانیم الگوریتم فیبوناچی رو با روش های دیگری حل و بهینه تر کنیم ، اما در این آموزش ما از توابع بازگشتی استفاده کردیم که ساده ترین و مرسوم ترین روش در پیاده سازی این الگوریتم هست
سری اعداد فیبوناچی
چنانکه در ویکیپدیا آمده، فیبوناچی نام ریاضیدان ایتالیایی است که در مسابقات سال 1225 برای حل مساله مطرح شده راهحلی ارائه داد که جواب آن سری فیبوناچی شد و به احترام او این سری اعداد را سری فیبوناچی نامگذاری کردند. این سری به دنبالهای از اعداد گفته میشود که به ازای هر x عضو اعداد صحیح مثبت بزرگتر از ? داشته باشیم:
و به ازای x=0,1 داریم: F(x)=x.
جمله عمومی سری فیبوناچی بهصورت زیر است:
حال ما قصد داریم همین اعداد را با برنامهنویسی محاسبه کنیم. اولین سوال ما بهدست آوردن یک عنصر مشخص از اعداد فیبوناچی است، مثلا عنصر xام از این سری از اعداد را بهدست بیاورید.
برای این کار باید در یک حلقه اعداد را با دو عدد قبلی جمع کنیم، مثلا اگر عنصر 10 ام سری فیبوناچی را از ما خواستند در یک حلقه از 1 تا 10 اعداد را با دو عدد پیشین جمع میکنیم.
فقط دقت داشته باشید که دو عدد اول 0 و 1 هستند. فرض میکنیم عدد اول a و عدد دوم b باشد و fib عدد مورد نظر ما باشد. در هر بار اجرا شدن حلقه فوق داریم:
اینطوری میدانیم که در هر مرحله عدد فیبوناچی مورد نظر ما چیست. پس کد را بهصورت زیر مینویسیم:
long Fibonacci(int no)
for (int i = 1; i « no; i++)
بسیار خب این روش ترتیبی برای بهدست آوردن اعداد فیبوناچی است، میتوانیم بهصورت بازگشتی نیز اعداد فیبوناچی را محاسبه کنیم.
در روش بازگشتی در هر مرحله تابع به دو بخش تقسیم میشود و برای هر دو بخش دوباره تابع فراخوانی میشود. در مرحله اول تابع به ازای ( Fibonacci (no–1 و ( Fibonacci (no–2 دوبار اجرا میشود و همینطور در مرحله بعدی این دو تابع از حل 4 تابع دیگر بهدست میآید و همینطور اگر حساب کنیم میبینیم که در محاسبه عدد nام سری فیبوناچی باید 2 به توان n + 1 بار تابع اجرا شود. از آنجا که در توابع بازگشتی از Stack پشته استفاده میشود و فضای پشته محدود است با زیاد شدن no دچار خطایStack Overflow خواهیم شد!
پس در محاسبه اعداد بزرگ بهتر است از روش بازگشتی استفاده نکنیم.
کد روش بازگشتی بهصورت زیر است:
long FibonacciRecursive(int no)
if ((no == 1) || (no == 2))
return FibonacciRecursive(no - 1) + FibonacciRecursive(no - 2);
در هر دو روش ممکن است عدد فیبوناچی حاصل بقدری بزرگ باشد که در متغیرهای معمول زبانهای برنامهنویسی جای نگیرد، آن وقت تکلیف چیست؟
برای حل این مشکل باید عدد حاصل را یک آرایه تعریف کرده و فرض کنید هر رقم از آرایه یک رقم از عدد است. برای اطلاعات بیشتر در مورد پیادهسازی جمع برای اعداد بزرگ به مقالههای قبلی که پیرامون این موضوع هستند مراجعه کنید.
آیا راهحل دیگری برای بهدست آوردن عدد فیبوناچی وجود دارد؟ بله! با استفاده از عدد طلایی Phi.
برای محاسبه عدد فیبوناچی با استفاده از عدد طلایی کافیست جای n در فرمول زیر شماره عدد فیبوناچی مورد نظر را قرار دهید.
fn = math.pow(Phi, n) / math.sqrt( 5)
عدد فی برابر است با: (25/1+ 1) / 2 = 1.6180339
double Phi = (Math.Sqrt(5) + 1) / 2;
double سری فیبوناچی بازگشتی fibonachi = Math.Pow(Phi, 40) / Math.Sqrt(5);
بسیار خب ما توانستیم برای محاسبه عدد فیبوناچی از سه روش استفاده کنیم، هر کدام از روشهای ذکر شده ویژگیهای خود را دارند.
مزیت روش آخر نسبت به روشهای دیگر این است که دیگر حلقهای اجرا نمیشود و بیشتر از توابع کتابخانهای هر زبان استفاده شده است (توابع Math.Pow تابع توان و Math.Sqrt تابع جذر).
یکی دیگر از مسائلی که در مورد اعداد فیبوناچی مطرح میشود این است که عکس مراحل بالا را انجام دهیم، یعنی یک عدد به ما بدهند و تشخیص بدهیم که آیا این عدد جزئی از سری فیبوناچی است یا نه؟ یا به اصطلاح این عدد فیبوناچی است یا خیر؟