توابع بازگشتی چیست ؟ توضیح دهید .
توابع بازگشتی چیست ؟ توضیح دهید .
ما اشاره کردیم که یک تابع میتواند توسط تابع دیگري فراخوانی شود و شـما چنـدین مثـال را در این مورد ملاحظه کردید. جالبتر اینکه یک تابع میتواند خودش را هم فراخوانی کند. ممکن است مزایاي چنین امکـانی به خوبی معلوم نباشد، اما این یکی از جذابترین و جالبترین کارهایی است که یـک برنامـه مـیتوانـد انجام دهد. براي نمونه به تابع زیر بنگرید:
def countdown(n):
if n == 0:
print “Blastoff!”
else:
print n
countdown(n-1)
تابع countdown انتظار دارد که پارامتر n مثبت باشـد. اگـر n صـفر باشـد خروجـی، کلمـۀ !Blastoff است، در غیـر ایـن صـورت خروجـی n اسـت و سـپس تـابعی بـه نـام countdown
(خودش) فراخوانی میشود و 1-n به عنوان آرگومانی به آن فرستاده میشود. اگر تابعی مانند تابع زیـر را فراخوانی کنید چه اتفاقی میافتد؟
>> countdown(3)
اجراي countdown با 3=n شروع میشود و چون n صفر نیست، خروجی مقدار 3 میباشد و سـپس تابع خودش را صدا میزند . . . اجراي countdown با 2=n شروع میشود و چون n صفر نیست، خروجی مقدار 2 میباشد و سپس تابع خودش را صدا میزند . . . اجراي countdown با 1=n شروع میشود و چون n صفر نیست، خروجـی مقـدار 1 میباشد و سپس تابع خودش را صدا میزند . . . اجراي countdown با 0=n شروع میشود و چون n برابر با 0 است، خروجی کلمۀ !Blastoff است و سپس باز میگردد. آن تابع countdown که پارامتر 1=n را گرفته بود باز میگردد. آن تابع countdown که پارامتر 2=n را گرفته بود باز میگردد. آن تابع countdown که پارامتر 3=n را گرفته بود هم باز میگردد. و سپس شما به __main __بر میگردیـد (چـه سـفري!!). بنـابراین کـل خروجـی کـه دیـده میشود به این صورت است:
3
2
1
Blastoff!
به عنوان دومین مثال دوباره به تابع newLine و threeLines نگاه کنید:
def newline():
def threeLines():
newLine()
newLine()
newLine()
اگر چه این توابع کار میکنند اما اگر بخواهیم خروجی 2 یا 106 خط جدید باشد، کمکی به مـا نمیکنند. چارة بهتر آن است که تابعی به این صورت بنویسیم:
nLines(n): def
if n > 0:
nLines(n-1)
این برنامه شبیه به countdown است؛ تا زمانیکه n بزرگتر از 0 است، خروجـی یـک خـط جدید است و سپس تابع خودش را جهت چاپ 1-n خط جدید دیگر فراخـوانی مـیکنـد. بـدینسـان تعداد کل خطوط جدید (1-n+(1 است که اگر محاسبات را درست انجام دهید به نتیجـۀ n خواهیـد رسید ! فرایند فراخوانی یک تابع توسـط خـود آن تـابع را بازگشـت و ایـنگونـه توابـع را بازگشـتی مینامند.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید