تابع بازگشتی (Recursive Function)
تابعی که در تعریف خودش، خودش رو صدا میزنه
برای مسائلی که میشه اونا رو به نسخههای کوچیکتر از خودشون تقسیم کرد مناسبه
هر تابع بازگشتی باید دو بخش داشته باشه:
- حالت پایه (Base Case): شرطی که بازگشت رو متوقف میکنه
- حالت بازگشتی (Recursive Case): تابع خودش رو با ورودی کوچیکتر صدا میزنه
120
- روند اجرا برای
factorial(3):
هشدارنکته
اگه حالت پایه تعریف نشه یا هیچوقت برقرار نشه، تابع بینهایت خودش رو صدا میزنه و در نهایت خطای RecursionError میده.
- مثال دیگه: دنباله فیبوناچی
8
مقایسه با حلقه (Loop)
- خیلی از مسائل بازگشتی رو میشه با حلقه هم حل کرد
- بازگشت معمولاً خواناتر ولی حلقه معمولاً بهینهتر (از نظر حافظه) هست