سری فیبوناچی در زبان C++

  • آخرین بروزرسانی در یکشنبه 13 سپتامبر 2020

    Average rating 5 / 5. Vote count: 1

در این نوشته به توضیح سورس کد برنامه چاپ n جمله از سری فیبوناچی در زبان C++ به روش بازگشتی و دو روش دیگر می پردازیم.

در ریاضیات، سری فیبوناچی (Fibonacci number) به دنباله‌ای از اعداد می‌گویند که غیر از دو عدد اول، اعداد بعدی از جمعِ دو عدد قبلی خود بدست می‌آیند.

اولین اعداد این سری عبارت‌اند از:

0,1,1,2,3,5,8,…

در الگوریتمی که در ادامه توضیح می دهیم نیز از همین منطق برای تولید جملات دنبال فیبوناچی استفاده می کنیم.

در این آموزش یاد می گیرید که چگونه در زبان C++ برنامه ای بنویسید که جملات سری فیبوناچی را تا n عدد چاپ کند.

برای این که بتوانید این مثال را به خوبی متوجه شوید، بهتر است با موارد زیر آشنا باشید.

  • حلقه for در زبان C++
  • حلقه while و do…while در زبان C++

چاپ سری فیبوناچی به روش بازگشتی در زبان C++

#include <iostream>
using namespace std;
int fib(int x) {
   if((x==1)||(x==0)) {
      return(x);
   }else {
      return(fib(x-1)+fib(x-2));
   }
}
int main() {
   int x , i=0;
   cout << "Enter the number of terms of series : ";
   cin >> x;
   cout << "\nFibonnaci Series : ";
   while(i < x) {
      cout << " " << fib(i);
      i++;
   }
   return 0;
}

خروجی کد بالا به صورت زیر خواهد بود:

Enter the number of terms of series : 15
Fibonnaci Series : 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

در کد بالا از مفهوم تابع بازگشتی استفاده شده است.

به این صورت که تابع fib به گونه ای تعریف شده که بنا به شرایطی ممکن است خودش خودش را دوباره فراخوانی کند.

فرض کنید عدد 3 را به برنامه بالا می دهید.

بنابراین برنامه باید به شما 2 جمله از دنباله فیبوناچی را نشان دهد.

به این منظور در اولین اجرای حلقه while عدد 0 به عنوان آرگومان وارد تابع بازگشتی فیبوناچی می شود.

با توجه به شرط درون تابع، مقدار 0 بازگشت داده می شود و آن مقدار هم چاپ می شود.

بنابراین تا اینجا اولین جمله دنباله چاپ شد.

بار دیگر عدد 1 وارد می شود و باز هم همان عدد بازگشت داده می شود و چاپ می شود.

بار دیگر 2 وارد می شود و این بار تابع دو بار و به ازای آرگومان های 1 و 0 فراخوانی می شود و در نهایت پاسخ ها با یکدیگر جمع می شود و برای چاپ به تابع اصلی (main) بازگشت داده می شود.

این کار به همین صورت ادامه دار خواهد بود.

سری فیبوناچی در زبان C++ بدون تابع بازگشتی

#include <iostream>
using namespace std;

int main()
{
    int n, t1 = 0, t2 = 1, nextTerm = 0;

    cout << "Enter the number of terms: ";
    cin >> n;

    cout << "Fibonacci Series: ";

    for (int i = 1; i <= n; ++i)
    {
        // Prints the first two terms.
        if(i == 1)
        {
            cout << " " << t1;
            continue;
        }
        if(i == 2)
        {
            cout << t2 << " ";
            continue;
        }
        nextTerm = t1 + t2;
        t1 = t2;
        t2 = nextTerm;
        
        cout << nextTerm << " ";
    }
    return 0;
}

خروجی به صورت زیر است:

Enter the number of terms: 10
Fibonacci Series: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 

چاپ سری فیبوناچی تا یک عدد مشخص در C++

این بار مثال را کمی متفاوت می کنیم

#include <iostream>
using namespace std;

int main()
{
    int t1 = 0, t2 = 1, nextTerm = 0, n;

    cout << "Enter a positive number: ";
    cin >> n;

    // displays the first two terms which is always 0 and 1
    cout << "Fibonacci Series: " << t1 << ", " << t2 << ", ";

    nextTerm = t1 + t2;

    while(nextTerm <= n)
    {
        cout << nextTerm << ", ";
        t1 = t2;
        t2 = nextTerm;
        nextTerm = t1 + t2;
    }
    return 0;
}

خروجی به صورت زیر است:

Enter a positive integer: 100
Fibonacci Series: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,

در واقع در این مثال از به جای تعداد جمله، حداکثر دنبال پرسیده می شود.

برای دنبال کردن نوشته های کاپ کد به کانال تلگرامی آن (cupcode_ir@) بپیوندید!

دیدگاه خود را بیان کنید

@