فیبوناچی در طبیعت

سری فیبوناچی در جاوا (Fibonacci)

در این آموزش به توضیح سری فیبوناچی در جاوا میپردازیم. پیش نیاز این آموزش مقدمات جاوا و روش های بازگشتی است.

سری فیبوناچی

در ریاضیات سری فیبوناچی به دنباله‌ای از اعداد گفته می‌شود که بصورت زیر تعریف می‌شود:

سری فیبوناچی در جاوا

 

غیر از دو عدد اول اعداد بعدی از جمع دو عدد قبلی خود بدست می‌آید. اولین اعداد این سری عبارت‌اند از:

۰٬ ۱٬ ۱٬ ۲٬ ۳٬ ۵٬ ۸٬ ۱۳٬ ۲۱٬ ۳۴٬ ۵۵٬ ۸۹٬ ۱۴۴٬ ۲۳۳٬ ۳۷۷٬ ۶۱۰٬ ۹۸۷٬ ۱۵۹۷٬ ۲۵۸۴٬ ۴۱۸۱٬ ۶۷۶۵٬ ۱۰۹۴۶٬ ۱۷۷۱۱

این اعداد به نام لئوناردو فیبوناچی ریاضیدان ایتالیایی نام گذاری شده‌است.

فیبوناچی در طبیعت

 

در دوران حیات فیبوناچی مسابقات ریاضی در اروپا بسیار مرسوم بود در یکی از همین مسابقات که در سال ۱۲۲۵ در شهر پیزا توسط امپراتور فردریک دوم برگزار شده بود مسئله زیر مطرح شد:

فرض کنیم خرگوش‌هایی وجود دارند که هر جفت (یک نر و یک ماده) از آنها که به سن ۱ ماهگی رسیده باشند به ازاء هر ماه که از زندگی‌شان سپری شود یک جفت خرگوش متولد می‌کنند که آنها هم از همین قاعده پیروی می‌کنند حال اگر فرض کنیم این خرگوشها هرگز نمی‌میرند و در آغاز یک جفت از این نوع خرگوش در اختیار داشته باشیم که به تازگی متولد شده‌اند حساب کنید پس از n ماه چند جفت از این نوع خرگوش خواهیم داشت.

فرض کنیم xn تعداد جفت خرگوش پس از n ماه باشد، میدانیم که ۱  x1=و x2=1 تعداد جفت خرگوشها در ماه n+1ام برابر خواهد بود با حاصل جمع تعداد جفت خرگوشهایی که در این ماه متولد می‌شوند با تعداد جفت خرگوشهای موجود(xn).اما چون هر جفت خرگوش که از دو ماه قبل موجود بوده هم اکنون حداقل دوماه سن خواهند داشت و به سن زادو ولد رسیده‌اند تعداد جفت خرگوش های متولد شده برابر خواهد بود با xn-1، پس خواهیم داشت:

  x1=1 و x2=1 و xn+1=xn+xn+xn-1

که اگر از قواعد مذکور پیروی کنیم به دنباله زیر خواهیم رسید که به دنباله فیبوناچی مشهور است.

۱, ۱, ۲, ۳, ۵, ۸, ۱۳, ۲۱, ۳۴, ۵۵, ۸۹, ۱۴۴, ۲۳۳, ۳۷۷, ۶۱۰, ۹۸۷, ۱۵۹۷, ۲۵۸۴,…

فیبوناچی با حل این مسئله از راه حل فوق دنباله حاصل را به جهان ریاضیات معرفی کرد که خواص شگفت‌انگیز و کاربردهای فراوان آن تا به امروز نه تنها نظر ریاضی‌دانان بلکه دانشمندان بسیاری از رشته‌های دیگر را به خود جلب کرده.

رابطه دنباله فیبوناچی به این شکل است:

فرمول دنباله فیبوناچی

برای مثال برای به دست آوردن جمله دهم باید جمله نهم (۳۴) و جمله  هشتم (۲۱) را با هم جمع کنیم که برابر ۵۵ می‌شود(ویکیپدیا).

 

سری فیبوناچی در جاوا

برای پیاده سازی سری فیبوناچی در جاوا از دو روش بازگشتی و غیر بازگشتی استفاده میکنیم.

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

برای پیاده سازی سری فیبوناجی به صورت بازگشتی ما ورودی خود را یک متغییر  int قرار میدهیم که نشان دهنده مرحله ای است که درون آن هستیم. مثلا اگر مقدار ورودی ۶ بود یعنی ما عدد ۶ در دنباله فیبونانچی را میخواهیم محاسبه کنیم.کد الگوریتم به صورت زیر است:

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));

    }

}

کد بالا شامل دو متد است:

  1. ()Fib: متد محاسبه عدد n امین عدد فیبونانچی
  2. ()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);

        }

    }

 

2 دیدگاه برای “سری فیبوناچی در جاوا (Fibonacci)

  1. سلام استاد خشته نباشید. من حدودا یک سالی میشه برنامه نویسی رو شروع کردم و سراغ اکثر زبان های برنامه نویسی رفتم ولی هیچ کدوم از برنامه نویسی ها برام قابل مفهوم نیست و هر چی هم روش فکر میکنم نمیتونم به جواب برسم که چرا اینجا این اتفاق افتاده. خواهشا من رو راهنمایی کنید تا برنامه نویسی رو یاد بگیرم. ممنون از آموزش های خوبتون…

    1. سلام علیرضا جان.
      یادگیری زبان برنامه نویسی بسیار ساده است. و بسیاری از زبان ها شبیه به هم هستند(java و c# و ….). پیشنهاد میکنم قبل از یادگیری به هدف یادگیری فکر کنی!!!! برای چه هدفی زبان برنامه نویسی یاد میگیری؟!!! مثلا دوست داری طراح سایت باشی یا دوست داری نرم افزار تحت شبکه بنویسی و ……. . هر کدام از این ها زبان برنامه نویسی بخصوص خود را دارد. مثلا طراحی سایت php و css و …. را دارد.
      بعد از تعیین هدف به دنبال زبان برنامه نویسی باش که آن زمینه قوی است. مثلا جاوا از لحاظ سرعت کامپایل و اجرا بالا است یا c# بسیار طراحی شیک در خود دارد و یا ……… . در آخر پشتکار در کار بسیار مهم است. رسیدن به هدف، تلاش زیادی میطلبد!!!!
      امیدوارم کمک کرده باشم.
      موفق و پیروز باشی.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *