درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
دوره های مرتبط
دوره آموزشی ساخت ربات تلگرام
مدرس: taghandiki
این دوره را در 8 قسط خریداری کنید
ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
مدرس: مهدی عادلی
این دوره را در 2 قسط خریداری کنید
دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
مدرس: حسین احمدی
این دوره را در 17 قسط خریداری کنید
دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
مدرس: taghandiki
این دوره را در 20 قسط خریداری کنید
دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
مدرس: حسین احمدی
این دوره را در 23 قسط خریداری کنید
دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
مدرس: مهدی عادلی
این دوره را در 27 قسط خریداری کنید
دوره آموزشی طراحی رابط کاربری با JavaFX
مدرس: hharddy
این دوره را در 13 قسط خریداری کنید
دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
مدرس: dr-iman
این دوره را در 13 قسط خریداری کنید
دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
مدرس: مهدی عادلی
این دوره را در 17 قسط خریداری کنید
دوره آموزشی Exploit نویسی به زبان Perl
مدرس: dr-iman
این دوره را در 7 قسط خریداری کنید

آموزش زبان پایتون :: قسمت هجدهم - توابع بازگشتی (Recursive Functions)

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

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 باشید

نویسنده: حسین احمدی
منبع: جزیره برنامه نویسی وب سایت توسینسو
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است
برچسب ها
ردیف عنوان قیمت
1 آموزش زبان پایتون :: قسمت اول - مقدمات و آشنایی اولیه با پایتون رایگان
2 آموزش زبان پایتون :: قسمت دوم - دانلود پایتون و نوشتن اولین برنامه رایگان
3 آموزش زبان پایتون :: قسمت سوم - آشنایی با ساختار اسکریپت های پایتون رایگان
4 آموزش زبان پایتون :: قسمت چهارم - نوع های داده در زبان پایتون رایگان
5 آموزش زبان پایتون :: قسمت پنجم - تبدیل نوع ها به یکدیگر رایگان
6 آموزش زبان پایتون :: قسمت ششم - عملگرها در پایتون رایگان
7 آموزش زبان پایتون :: قسمت هفتم - دستور if رایگان
8 آموزش زبان پایتون :: قسمت هشتم - حلقه ها رایگان
9 آموزش زبان پایتون :: قسمت نهم - نوع های عددی و توابع کار با اعداد رایگان
10 آموزش زبان پایتون :: قسمت دهم - کار با رشته ها و توابع مرتبط رایگان
11 آموزش زبان پایتون :: قسمت یازدهم - لیست ها رایگان
12 آموزش زبان پایتون :: قسمت دوازدهم - Tuple ها رایگان
13 آموزش زبان پایتون :: قسمت سیزدهم - دیکشنری ها (Dictionaries) رایگان
14 آموزش زبان پایتون :: قسمت چهاردهم - مجموعه ها (Sets) رایگان
15 آموزش زبان پایتون :: قسمت پانزدهم - تابع zip و پیمایش چند لیست به صورت همزمان رایگان
16 آموزش زبان پایتون :: قسمت پانزدهم - روش Comprehension برای ایجاد لیست ها، دیکشنری ها و مجموعه ها رایگان
17 آموزش زبان پایتون :: قسمت شانزدهم - توابع (Functions) رایگان
18 آموزش زبان پایتون :: قسمت هفدهم - Closure ها رایگان
19 آموزش زبان پایتون :: قسمت هجدهم - توابع بازگشتی (Recursive Functions) رایگان
20 آموزش زبان پایتون :: قسمت نوزدهم - ماژول ها (Modules) رایگان
21 آموزش زبان پایتون :: قسمت بیستم - پکیج ها (Packages) رایگان
22 برنامه نویسی شئ گرا در پایتون :: مقدمات و آشنایی با کلاس و شئ رایگان
مطالب مرتبط

در حال دریافت اطلاعات

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

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

برای ارسال نظر ابتدا به سایت وارد شوید

arrow