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

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


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

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

 

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

در مورد توابع بازگشتی باید چندین نکته را رعایت کنید :

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

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

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

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

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

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

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

 

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

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

اشتراك گذاری نوشته

پاسخ دهید

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