در این قسمت تیم کدگیت را با آموزش سری فیبوناچی در سی پلاس پلاس همراهی کنید. پیش نیاز این آموزش مقدمات سی پلاس پلاس و روش های بازگشتی است.
سری فیبوناچی
در ریاضیات سری فیبوناچی به دنبالهای از اعداد گفته میشود که بصورت زیر تعریف میشود:
غیر از دو عدد اول اعداد بعدی از جمع دو عدد قبلی خود بدست میآید. اولین اعداد این سری عبارتاند از:
۰٬ ۱٬ ۱٬ ۲٬ ۳٬ ۵٬ ۸٬ ۱۳٬ ۲۱٬ ۳۴٬ ۵۵٬ ۸۹٬ ۱۴۴٬ ۲۳۳٬ ۳۷۷٬ ۶۱۰٬ ۹۸۷٬ ۱۵۹۷٬ ۲۵۸۴٬ ۴۱۸۱٬ ۶۷۶۵٬ ۱۰۹۴۶٬ ۱۷۷۱۱
این اعداد به نام لئوناردو فیبوناچی ریاضیدان ایتالیایی نام گذاری شدهاست.
در دوران حیات فیبوناچی مسابقات ریاضی در اروپا بسیار مرسوم بود در یکی از همین مسابقات که در سال ۱۲۲۵ در شهر پیزا توسط امپراتور فردریک دوم برگزار شده بود مسئله زیر مطرح شد:
فرض کنیم خرگوشهایی وجود دارند که هر جفت (یک نر و یک ماده) از آنها که به سن ۱ ماهگی رسیده باشند به ازاء هر ماه که از زندگیشان سپری شود یک جفت خرگوش متولد میکنند که آنها هم از همین قاعده پیروی میکنند حال اگر فرض کنیم این خرگوشها هرگز نمیمیرند و در آغاز یک جفت از این نوع خرگوش در اختیار داشته باشیم که به تازگی متولد شدهاند حساب کنید پس از n ماه چند جفت از این نوع خرگوش خواهیم داشت.
فرض کنیم xn تعداد جفت خرگوش پس از n ماه باشد، میدانیم که 1 x1=و x2=1 تعداد جفت خرگوشها در ماه n+1ام برابر خواهد بود با حاصل جمع تعداد جفت خرگوشهایی که در این ماه متولد میشوند با تعداد جفت خرگوشهای موجود(xn).اما چون هر جفت خرگوش که از دو ماه قبل موجود بوده هم اکنون حداقل دوماه سن خواهند داشت و به سن زادو ولد رسیدهاند تعداد جفت خرگوش های متولد شده برابر خواهد بود با xn-1، پس خواهیم داشت:
x1=1 و x2=1 و xn+1=xn+xn-1
که اگر از قواعد مذکور پیروی کنیم به دنباله زیر خواهیم رسید که به دنباله فیبوناچی مشهور است.
۱, ۱, ۲, ۳, ۵, ۸, ۱۳, ۲۱, ۳۴, ۵۵, ۸۹, ۱۴۴, ۲۳۳, ۳۷۷, ۶۱۰, ۹۸۷, ۱۵۹۷, ۲۵۸۴,…
فیبوناچی با حل این مسئله از راه حل فوق دنباله حاصل را به جهان ریاضیات معرفی کرد که خواص شگفتانگیز و کاربردهای فراوان آن تا به امروز نه تنها نظر ریاضیدانان بلکه دانشمندان بسیاری از رشتههای دیگر را به خود جلب کرده.
رابطه دنباله فیبوناچی به این شکل است:
برای مثال برای به دست آوردن جمله دهم باید جمله نهم (۳۴) و جمله هشتم (۲۱) را با هم جمع کنیم که برابر ۵۵ میشود(ویکیپدیا).
سری فیبوناچی در سی پلاس پلاس
برای پیاده سازی سری فیبوناچی در سی پلاس پلاس از دو روش بازگشتی و غیر بازگشتی استفاده میکنیم.
سری فیبوناچی در سی پلاس پلاس با روش بازگشتی
برای پیاده سازی سری فیبوناجی به صورت بازگشتی ما ورودی خود را یک متغییر int قرار میدهیم که نشان دهنده مرحله ای است که درون آن هستیم. مثلا اگر مقدار ورودی 6 بود یعنی ما عدد 6 در دنباله فیبونانچی را میخواهیم محاسبه کنیم.کد الگوریتم به صورت زیر است:
int main() {
int N = 10;
for (long int i = 1; i <= N; i++)
printf("%ld --> %ld \n",i,fib(i));
return 0;
}
long int fib(long int n) {
if (n <= 1)
return n;
else
return fib(n - 1) + fib(n - 2);
}
کد بالا شامل دو متد است:
- Fib: متد محاسبه عدد n امین عدد فیبونانچی
- Main: کد تست برنامه فیبونانچی
سری فیبوناچی در سی پلاس پلاس با روش غیر بازگشتی
در روش غیر بازگشتی ما دو متغیر تعریف میکنیم برای نگهداری دو مرحله قبل از دنباله و از آن برای محاسبه عدد بعدی دنباله فیبوناچی استفاده میکنیم. کد غیر بازگشتی فیبوناچی به صورت زیر است:
int main() {
int N = 10;
int f = 0, g = 1;
for (int i = 1; i <= N; i++) {
f = f + g;
g = f - g;
printf("%d\n",f);
}
return 0;
}
ممنون مفید بود
AAlii…merci