بایگانی برچسب: s

آموزش زبان ++C - مقدمه

آموزش برنامه نویسی ++C – توابع بازگشتی یا (Recursive Function) – قسمت سوم

در این قسمت تمرینی دیگر از توابع بازگشتی مثال زده خواهد شد.
تمرین: با استفاده از توابع بازگشتی برنامه ای بنویسید که دنباله فیبیوناتچی را حساب کند.
برای حل این تمرین ابتدا نیازمند آشنایی با چند مفهوم در ریاضی می باشید.
۱- دنباله: به مجموعه ای از اعداد گفته می شود که بوسیله ی ترتیبی خاص که جمله عمومی یا (فرمول دنباله) نام دارند محاسبه می شوند، مانند دنباله اعداد اول یا دنباله اعداد فرد.
۲- دنباله بازگشتی: نوعی از دنباله هاست که برای محاسبه هرکدام از اعدادش به عدد پیشین نیازمند است.
۳- اندیس: همانطور که به یاد دارید در قسمت آرایه ها برای اشاره به خانه ی پنجم همواره داشتیم:

عدد چهار اندیس است. در ریاضی مانند آرایه ها اندیس ها اِلزاما از صفر شروع نمی شوند و کارشان همانند آرایه ها اشاره به عدد خاصی می باشد. اندیس ها را در ریاضی در زیر عدد می نویسند (مانند زیروند در شیمی). و معمولا آن را با حرف n نمایش می دهند.
…,an=1,3,5,7
در مثال بالا a یک متغیر است و n اندیس است (بخوانید a اندیس n).
حال اگر بخواهیم به عدد سوم اشاره کنیم بصورت زیر عمل می کنیم:
نکته: انتخاب اندیس به شما بستگی دارد بنابراین هم می توانید اندیس را از صفر بگیرید هم از یک که اگر از صفر بگیرید همانند آرایه ها خواهد شد.ما در این مثال ترجیحا از اندیس یک شروع میکنیم.
a3=5
بخوانید a اندیس ۳ برابر ۵ .
۳- دنباله فیبیوناتچی: به دنباله ی بازگشتی ای گفته می شود که اعداد آن از جمع دو عدد پیشین آن عدد بدست می آید.
نکته:اگر اندیس را از یک بگیرید دو اعدد اول این دنباله برابر یک است اما اگر اندیس را از صفر بگیرید دو عدد اول صفر و یک خواهند بودک
پس با توجه به نکته بالا فرمول این دنباله بصورت زیر است:
n=0 => 0,1,1,2,3,5,8,13,…,an-1 + an-2 اگر
n=1 => 1,1,2,3,5,8,13,…,an-1 + an-2 اگر
ما ترجیحا از فرمول دوم استفاده خواهیم کرد.
اگر توجه کنید عدد دو برای مثال از جمع دو عدد پیش از خود بدست آمده و یا عدد سه که از جمع عدد دو و یک بدست آمده.
اکنون این دنباله را به فرم توابع بازگشتی مینویسیم.
برای نوشتن آن به صورت توابع بازگشتی به کد زیر توجه کنید.
ابتدا تابع بازگشتی را تعریف کرده.

توجه کنید که در تابع بالا عدد صفر را نیز برای جلوگیری از اشتباه در برنامه قرار دادیم.
خب حال به فراخوانی تابع در تابع ()main می پردازیم.

اندیس ها در هیچ موردی منفی نمی شود مثلا اندیس ۱۳- معنایی ندارد بنابراین در کد بالا شرطی مبنی بر این نوشته تا از این اشتباه جلوگیری شود.
و در نهایت:

آموزش برنامه نویسی ++C – توابع بازگشتی یا (Recursive Function) – قسمت سوم

همانطور که می بینید هفتمین جمله از دنباله فیبیوناتچی برابر ۱۳ می باشد.
آموزش برنامه نویسی ++C – توابع بازگشتی یا (Recursive Function) – قسمت سوم

آموزش زبان ++C - مقدمه

آموزش برنامه نویسی ++C – توابع بازگشتی یا (Recursive Function) – قسمت اول

همانطور که به یاد دارید در مقالات گذشته گفته شد که یک تابع برای آنکه به مرحله اجرا برسد باید در تابع ()main فراخوانی شود. اما توابع نیز می توانند خود را فراخوانی کنند. به چنین توابعی توابع بازگشتی گویند. بنابراین توابع بازگشتی به توابعی گفته می شود که خود را فرا بخوانند و نام دیگر آن خود فراخوان یا (recursive Function) می باشد.
زمانی یک تابع جُزء توابع بازگشتی قرار می گیرد که:
۱- شرطی برای تکرار شدن آن تابع وجود داشته باشد.
۲- شرطی برای متوقف شدن آن تابع نیز وجود داشته باشد.
هنگامی که شما هر دو شرط بالا را به درستی در تابع مورد نظر خود پیاده کردید تابع شما جزء توابع بازگشتی قرار خواهد گرفت.
ابتدا با دو مثال ساده تفاوت توابع بازگشتی و توابع عادی را شرح می دهیم.

در برنامه بالا یک تابع بصورت عادی تعریف شد و کار آن نمایش اعداد یک تا نه می باشد.
حال به نحوه نوشتن برنامه بالا در قالب توابع بازگشتی توجه کنید:

آموزش برنامه نویسی ++C – توابع بازگشتی یا (recursive Function) – قسمت اول

خروجی هر دو برنامه همانند تصویر بالا می باشد.
حالا به مثال زیر توجه کنید.

ما در ورودی عدد پنج را وارد می کنیم (انتخاب عدد پنج دلیل خاصی نداشته و انتخاب اعداد کاملا به شما بستگی دارد) و خروجی همانند تصویر زیر خواهد بود.

آموزش برنامه نویسی ++C – توابع بازگشتی یا (recursive Function) – قسمت اول

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