/ در برنامه نویسی / توسط

آموزش برنامه نویسی ++c -قسمت نهم

توابع بازگشتی در C++

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

کدی به زبان C++ با استفاده از تابع بازگشتی بنویسید که حاصلضرب دو عدد را با استفاده از حاصلجمع آنها بدست آورد .(برای حل این مثال لازم است بدانید که 🙂

            a*b=a          ----->     اگر b=1
            a*b=a*(b-1)+a  ----->     اگر b>1                              

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
۲۰
۲۱
۲۲
۲۳
۲۴
۲۵
۲۶
۲۷
۲۸
۲۹
۳۰
۳۱
۳۲
۳۳
۳۴
۳۵
۳۶
۳۷
۳۸
۳۹
۴۰
۴۱
۴۲
#include <iostream.h>
#include <conio.h>

int product(int, int);      

int main()
{
    int a, b;

    cout << "Enter first number :" ;
    cin >> a;
    cout << "Enter second number :" ;
    cin >> b;
            
    cout << product(a, b);

    getch();
    return 0;
}

int product(int a, int b)       
{
    if(b == 1)
        return a;
    return (a + product(a, b-1));
}

         //////////////////////توضیح\\\\\\\\\\\\\\\\\\\\

/*    a=4, b=3

۱) if(3==1)
    return 4;
return(4+product(4,3-1))

۲) if(2==1)
    return 4;
return(4+product(4,2-1))

۳) if(1==1)
    return 4;
return(4+product(4,1-1))    */
Enter first number :4
Enter second number :3
۱۲

در فراخوانی سوم از تابع بازگشتی بالا، شرط درست است پس مقدار ۴ به فراخوانی دوم بر میگردد و باز با مقدار ۴ فراخوانی دوم جمع شده و عدد حاصل که ۸ است به فراخوانی اول بر میگردد و باز با ۴ جمع شده و در نهایت مقدار ۱۲ که جواب ماست چاپ می شود. حتما توجه کنید که از فراخوانی سوم به بعد شرط if نقض شده و فراخوانی تابع بازگشتی متوقف می شود .
در مورد توابع بازگشتی باید چندین نکته را رعایت کنید :

الف) غیر از اینکه تابع بازگشتی را در تابع main فراخوانی می کنیم باید در درون تعریف خود تابع بازگشتی هم آنرا فراخوانی کنیم.

ب) قبل از فراخوانی تابع بازگشتی خود در تعریف تابع، باید شرطی را برقرار سازیم که پس از طی روال مشخصی فراخوانی به پایان برسد .

پ) در فراخوانی تابع بازگشتی در خود تابع، یکی از پارامترها باید تغییر نماید حال زیاد شود یا کم یا … و این بسته به نیاز تابع خواهد بود .

ج) هر تابعی را نمی توان بصورت بازگشتی نوشت مگر اینکه رابطه منطقی و ریاضی در این مورد برای آن پیدا کنیم .

ه) یک تابع بازگشتی باید دارای نوع برگشتی باشد وحداقل یک پارامتر ورودی داشته باشد .

مثال سری فیبوناچی را با هم به وسیله توابع بازگشتی در C++ بررسی می کنیم :

می دانیم که برای پیدا کردن فاکتوریل یک عدد باید خود عدد را در عدد قبلی ضرب کرده و حاصل آنرا هم به همین ترتیب در عدد قبلی ضرب و به همین ترتیب ادامه دهیم تا به ۱ برسیم. لذا وقتی ضرب اعداد در هم ادامه پیدا می کند که به عد ۱ برسیم و این شرط ما خواهد بود وهمینطور می دانیم که فاکتوریل ۱ برابر با ۱ است .

           ۵! = ۵*۴*۳*۲*۱ = ۱۲۰  
           n! = n*(n-1)*(n-2)*... تا زمانیکه n>1 باشد                            

برنامه سری فیبوناچی با توابع بازگشتی :


۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
۲۰
۲۱
۲۲
۲۳
#include <iostream.h>
#include <conio.h>

long factorial(int);      

int main()
{
    long number;

    cout << "Please type a number :" ;
    cin >> number;
            
    getch();
    return 0;
}

long factorial(int a)       
{
    if(a > 1)
        return ( a*factorial(a-1) );
    else
        return (1);
}
Please type a number :9
۹! = ۳۶۲۸۸۰                         

خدمت عزیزان باید عرض کنم که در کد بالا نوعی را به نام long می بینیم که شامل اعداد صحیح بزرگتر از int می باشد . دلیل استفاده از این نوع این است که int شامل اعداد بین ۳۲۷۶۷ و -۳۲۷۶۷ است و چون جواب ما از این محدوده بیشتر است باید از long استفاده کنیم .

نوشته های مشابه

آموزش برنامه نویسی ++c -قسمت هشتم

 Function | توابع در C++ در این فصل ما به بحث در مورد یکی از مفاهیم مهم و اساسی در…

آموزش برنامه نویسی ++c -قسمت دهم

 آرایه ها در C++ خدمت عزیزان باید عرض کنم در فصول قبل، داده ها را در درون متغیرها و یا…

نظری بدهید

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