در این جلسه تیم کدگیت را با آموزش سری فیبوناچی در جاوا همراهی کنید. پیش نیاز این آموزش مقدمات جاوا و روش های بازگشتی است.
سری فیبوناچی
در ریاضیات سری فیبوناچی به دنبالهای از اعداد گفته میشود که بصورت زیر تعریف میشود:

غیر از دو عدد اول اعداد بعدی از جمع دو عدد قبلی خود بدست میآید. اولین اعداد این سری عبارتاند از:
۰٬ ۱٬ ۱٬ ۲٬ ۳٬ ۵٬ ۸٬ ۱۳٬ ۲۱٬ ۳۴٬ ۵۵٬ ۸۹٬ ۱۴۴٬ ۲۳۳٬ ۳۷۷٬ ۶۱۰٬ ۹۸۷٬ ۱۵۹۷٬ ۲۵۸۴٬ ۴۱۸۱٬ ۶۷۶۵٬ ۱۰۹۴۶٬ ۱۷۷۱۱
این اعداد به نام لئوناردو فیبوناچی ریاضیدان ایتالیایی نام گذاری شدهاست.
در دوران حیات فیبوناچی مسابقات ریاضی در اروپا بسیار مرسوم بود در یکی از همین مسابقات که در سال ۱۲۲۵ در شهر پیزا توسط امپراتور فردریک دوم برگزار شده بود مسئله زیر مطرح شد:
فرض کنیم خرگوشهایی وجود دارند که هر جفت (یک نر و یک ماده) از آنها که به سن ۱ ماهگی رسیده باشند به ازاء هر ماه که از زندگیشان سپری شود یک جفت خرگوش متولد میکنند که آنها هم از همین قاعده پیروی میکنند حال اگر فرض کنیم این خرگوشها هرگز نمیمیرند و در آغاز یک جفت از این نوع خرگوش در اختیار داشته باشیم که به تازگی متولد شدهاند حساب کنید پس از n ماه چند جفت از این نوع خرگوش خواهیم داشت.
فرض کنیم xn تعداد جفت خرگوش پس از n ماه باشد، میدانیم که 1 x1=و x2=1 تعداد جفت خرگوشها در ماه n+1ام برابر خواهد بود با حاصل جمع تعداد جفت خرگوشهایی که در این ماه متولد میشوند با تعداد جفت خرگوشهای موجود(xn).اما چون هر جفت خرگوش که از دو ماه قبل موجود بوده هم اکنون حداقل دوماه سن خواهند داشت و به سن زادو ولد رسیدهاند تعداد جفت خرگوش های متولد شده برابر خواهد بود با xn-1، پس خواهیم داشت:
x1=1 و x2=1 و xn+1=xn+xn-1
که اگر از قواعد مذکور پیروی کنیم به دنباله زیر خواهیم رسید که به دنباله فیبوناچی مشهور است.
۱, ۱, ۲, ۳, ۵, ۸, ۱۳, ۲۱, ۳۴, ۵۵, ۸۹, ۱۴۴, ۲۳۳, ۳۷۷, ۶۱۰, ۹۸۷, ۱۵۹۷, ۲۵۸۴,…
فیبوناچی با حل این مسئله از راه حل فوق دنباله حاصل را به جهان ریاضیات معرفی کرد که خواص شگفتانگیز و کاربردهای فراوان آن تا به امروز نه تنها نظر ریاضیدانان بلکه دانشمندان بسیاری از رشتههای دیگر را به خود جلب کرده.
رابطه دنباله فیبوناچی به این شکل است:

برای مثال برای به دست آوردن جمله دهم باید جمله نهم (۳۴) و جمله هشتم (۲۱) را با هم جمع کنیم که برابر ۵۵ میشود(ویکیپدیا).
سری فیبوناچی در جاوا
برای پیاده سازی سری فیبوناچی در جاوا از دو روش بازگشتی و غیر بازگشتی استفاده میکنیم.
سری فیبوناچی در جاوا با روش بازگشتی
برای پیاده سازی سری فیبوناجی به صورت بازگشتی ما ورودی خود را یک متغییر int قرار میدهیم که نشان دهنده مرحله ای است که درون آن هستیم. مثلا اگر مقدار ورودی 6 بود یعنی ما عدد 6 در دنباله فیبونانچی را میخواهیم محاسبه کنیم.کد الگوریتم به صورت زیر است:
public class Fibonacci {
public static long fib(int n) {
if (n <= 1) return n;
else return fib(n-1) + fib(n-2);
}
public static void main(String[] args) {
int N = 10;
for (int i = 1; i <= N; i++)
System.out.println(i + ": " + fib(i));
}
}
کد بالا شامل دو متد است:
- Fib: متد محاسبه n امین عدد فیبونانچی
- Main: کد تست برنامه فیبونانچی
سری فیبوناچی در جاوا با روش غیر بازگشتی
در روش غیر بازگشتی ما دو متغیر تعریف میکنیم برای نگهداری دو مرحله قبل از دونباله و از آن برای محاسبه عدد بعدی دنباله فیبوناچی استفاده میکنیم. کد غیر بازگشتی فیبوناچی به صورت زیر است:
public static void main(String[] args) {
int N = 20;
int f = 0, g = 1;
for (int i = 1; i <= N; i++) {
f = f + g;
g = f - g;
System.out.println(f);
}
}
سلام
خسته نباشید
میشه کامل توضیح بدین چجوری این مسله بدون متد بازگشتی کامل شد و بگین که هر کدوم چه کار هایی را میکنند
سلام. شما هم خسته نباشد. برای پیاده سازی روش غیر بازگشتی ما نیاز به اعداد دو مرحله قبل سری فیبوناچی داریم. f و g همین کار رو برای ما می کنند