تابع  بازگشتی در پایتون

پایتون آریا پروژه

تابع  بازگشتی در پایتون

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

جالب‌تر اینکه یک تابع میتواند خودش را هم فراخوانی کند.

ممکن است مزایای چنین امکانات بخوبی معلوم نباشد اما این یکی از جذاب ترین و جالب ترین کارهایی است که یک برنامه می تواند انجام دهد.

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

تابع countdown انتظار دارد که پارامترn مثبت باشد. اگرn  مثبت باشد.

اگرn صفر باشد خروجی، کلمه ی blastoff! است. در غیر اینصورت خروجیn است و سپس تابعی به نامcountdown( خودش) فراخوانی می شودوn_1 به عنوان آرگومان ای به آن فرستاده میشود. اگر تابعی را مانند تابع زیر را فراخوانی کنید چه اتفاقی می افتد؟

اجرای countdownباn=3شروع می شود و چون nصفر نیست. خروجی مقدار سمی باشد و سپس تابع خودش را صدا میزند….

اجرایcountdownباn=2 شروع می‌شود و چونn صفر نیست، خروجی مقدار ۲ می باشد و سپس تابع خودش را صدا میزند……

اجرایcountdownباn=1 شروع می‌شود و چونn صفر نیست ، مقدار یک می باشد و سپس تابع خودش را صدا میزند…..

اجرایcountdownباn=0 شروع می‌شود و چونn برابر با صفر است, خروجی کلمهblastoff! است و سپس باز می گردد.

آن تابعcountdown  که پارامتر  n=1 را گرفته بود باز می گردد.

آن تابع countdown که پارامترn=2 را گرفته بود باز می گردد.

آن تابعcountdown که پارامتر n=3 را گرفته بود هم باز می گردد.

و سپس شما به_main_ برمی‌گردید. بنابراین کل خروجی که دیده می‌شود به این صورت است:

به عنوان دومین مثال دوباره به تابعnewlineوthreelines نگاه کنید:

اگرچه این تابع کار می کنند  اگر بخواهیم خروجی ۲یا۱۶۰ خط جدید باشد، کمک به ما نمی کنند.

چاره بهتر آن است که تا به این صورت بنویسیم:

این برنامه شبیه بهcountdown است. تا زمانی کهn بزرگتر از صفر است. خروجی یک خط جدید است و سپس تابع خودش را جهت چاپn=1 خط جدید دیگر فراخوانی می کند.

بدین سان تعداد کل خطوط جدید(n_1 )+ 1 است اگر محاسبات را درست انجام دهید به نتیجهn خواهید رسید!

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

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

هر وقت که تابع فراخوانی می شود پایتون یک قالب برای تابع جدید می‌سازد که شامل متغیر ها و پارامترهای محلی تابع است.

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

پشته ای را برایcountdown نمایش می دهد که باn=3 فراخوان شده است:

همیشه بالای پشته قابی برای_main_ قرار دارد.

این قاب خالی است زیرا ما هیچ متغیری در _main_ نساخته ایم و یا هیچ پارامتری با آن نفرستاده ایم.

چهار قابcountdown مقادیر متفاوتی برای n دارند

پایین پشت در جایی کهn=0است. حالت مبنا نامیده می شود.

این قاب به صورت بازگشتی فراخوانی نمی شود بنابراین قاب های بیشتری وجود ندارند.

 بازگشت بی انتها برای توابع بازگشتی در پایتون

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

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

در اینجا کوچک ترین برنامه با یک بازگشت بی انتها را مشاهده می کنید.

در اغلب محیط های برنامه نویسی برنامه با یک بازگشت بی انتها واقعا برای همیشه اجرا نمی شوند. پایتون وقتی که به حداکثر عمق بازگشت رسید یک پیغام خطا گزارش می دهد:

وقتی خطا رخ میدهد، صد قاب بازگشتی در پشت وجود دارد‌.

بنابراین در عمل خط اول پیغام فوق  صد مرتبه تکرارمی‌گردد که در اینجا ۹۸ تکرار آن حذف شده است.

دیدگاهتان را بنویسید

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