Loading…

جزیره برنامه نویسی و توسعه نرم افزار

ارسال کننده: حسین احمدی
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...
ارسال پیام خصوصی
امتیازات این مطلب
نکته: آموزش زبان پایتون :: قسمت هجدهم - توابع بازگشتی (Recursive Functions)
تا اینجا یاد گرفتیم که چگونه می توان بوسیله توابع کدها را به قطعات مختلف تقسیم کرد، به هر کدام از این قطعات یک نام تخصیص داد و بوسیله نام انتخاب شده توابع را فراخوانی کرد. در این قسمت می خواهیم با روش نوشتن توابع بازگشتی در زبان پایتون آشنا شویم. توابع بازگشتی توابعی هستند که در داخل بدنه تابع مجدد همان تابع فراخوانی می شود. در کد زیر با نحوه نوشتن توابع بازگشتی آشنا می شوید:

def func(n):
    func(n)

اما نوشتن یک تابع بازگشتی تنها با فراخوانی تابع در بدنه آن کافی نیست، در کد بالا تابع func در بدنه خودش، خودش را فراخوانی می کند و این کار به تعداد نامحدود ادامه پیدا می کند. در توابع بازگشتی باید در بدنه تابع شرطی تعیین شود که در یک شرایط خاص از ادامه فراخوانی توابع جلوگیری شود. برای آشنایی بیشتر با یک مثال ادامه می دهیم و مثال مورد نظر را هم در حالت عادی و هم بوسیله توابع بازگشتی پیاده سازی می کنیم. مثالی که استفاده می کنیم تابعی است که دو عدد را به عنوان ورودی دریافت کرده و عدد اول را به توان عدد دوم می رساند. در حالت عادی این تابع به صورت زیر پیاده سازی می شود:

>>> def pow(x,y):
...     result = 1
...     while(y > 0):
...         result *= x
...         y -= 1
...     return result
...
>>> pow(2,4)
16
>>> pow(5,5)
3125

حال همین تابع را به صورت بازگشتی پیاده سازی می کنیم:

>>> def pow(x,y):
...     if y==1:
...         return x
...     return x * pow(x,y-1)
...
>>> pow(2,4)
16
>>> pow(5,5)
3125

به تابع pow دقت کنید، در ابتدای تابع بررسی کردیم که اگر مقدار y برابر 1 بود مقدار x برگردانده شود، در غیر اینصورت مجدد تابع pow را با مقدار x و y - 1 فراخوانی می کنیم. نکته مهم در اینجا این است که با هر بار فراخوانی مجدد تابع pow یک واحد از y کم می شود تا زمانی که مقدار y برابر 1 شود، زمانی که مقدار y برابر 1 باشد، شرط تابع برقرار شده و به جای فراخوانی مجدد pow مقدار x بازگردانده می شود. در زیر مراحل فراخوانی تابع pow را برای مقادیر x=2 و y=4 مشاهده می کنید:

pow(2,4) # 1st call
2 * pow(2,3) # 2st call
2 * 2 * pow(2,2) 3st call
2 * 2 * 2 * pow(2,1) 4st call
2 * 2 * 2 * 2 # return 2 from 4th call
2 * 2 * 4 # return 4 from 3th call
2 * 8 # return 8 from 2th call
16 # return 16 from 1th call

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

>>> def fact(n):
...     if n==1:
...         return n
...     return n*fact(n-1)
...
>>> fact(4)
24
>>> fact(5)
120

در قسمت بعدی آموزش با Module ها و دستور import آشنا خواهیم شد. ITpro باشید

نویسنده: حسین احمدی
منبع: ITpro
سایر مطالب این گروه
دیدگاه ها
  • ارسال توسط:
  • زمان ارسال: 15 ماه قبل
مفید و عالی بود
  • ارسال توسط:
  • زمان ارسال: 14 ماه قبل
با سلام و خسته نباشید،
عزیز این آموزش هنوز ادامه داره دیگه درسته ؟
کی وارد محیط PyCharm میشیم؟
ممنون از آموزش عالیتون.
  • ارسال توسط:
  • زمان ارسال: 14 ماه قبل
کسی نیست جواب بده ؟
این آموزش متوقف شده ؟
سلام دوست عزیز، عذر خواهی میکنم، فراموش کردم جوابتون رو بدم، آموزش ادامه داره، اما در مورد PyCharm تو این دوره در موردش صحبتی نمیشه.
  • ارسال توسط:
  • زمان ارسال: 14 ماه قبل
سلام و تشکر بابت جوابتون،
یعنی آموزش این دوره فقط مرتبط با کنسول هستش؟
پس برای ساخت برنامه های جانبی از چه دوره هایی میتونیم استفاده کنیم؟
میشه راهنمایی کنید ؟

سلام مجدد، به زودی فیلم آموزشی پایتون روی سایت قرار میگیره و می تونید از اون دوره استفاده کنید.
  • ارسال توسط:
  • زمان ارسال: 14 ماه قبل
و برای سوال آخر،
به نظرتون این دوره رو ادامه بدم تا به آخر برسه و بعد که وارد بخش PyCharm شدید باز هم ادامه بدم ،
یا برای PyCharm منتظر بمونم؟
چون بنده C# رو تا حدودی با برنامه های تحت ویندوز اپلیکیشن کار کردم.
خیلی ممنون میشم راهنمایی برفمایید.
شما اگر قصد یادگیری پایتون دارید مطالعه کنید مطالب رو. چون در هر صورت باید مقدمات پایتون رو یاد بگیرید و این سری برای آشنایی با مفدمات مناسب هست.
  • ارسال توسط:
  • زمان ارسال: 14 ماه قبل
خیلی ممنون از پاسخ و آموزشتون.
  • ارسال توسط:
  • زمان ارسال: 9 ماه قبل
سلام، خسته نباشید!
ببخشید در پایان قسمت هجدهم یا قسمت اخر نوشتین در قسمت بعد ماژول ها تدریس خواهد شد!
اما اصلا قسمتی به این عنوان نیست!
چیکار باد بکنم؟
ممنون
برای ارسال نظر وارد شوید.

Countdown