Skip to content

Commit 184938f

Browse files
author
Saeid Darvish
committed
start Recursive function
1 parent c75973c commit 184938f

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

lessons/l14.rst

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,36 @@
3131
تابع بازگشتی
3232
------------
3333

34+
از درس نهم با دستورات کنترلی ``for`` و ``while`` آشنا شده‌ایم، این دستورات تنها ابزار ما برای تکرار قسمتی از کد بودند. اکنون با پیاده‌سازی شیوه‌ای جدید در تکرار آشنا می‌شویم.
35+
36+
به بیانی ساده، **تابع بازگشتی** (Recursive function) به تابعی گفته می‌شود که خود را از داخل بدنه خود فراخوانی می‌کند. پیاده‌سازی تابع به صورت بازگشتی شیوه‌ای است که از آن برای حل برخی مسائل بهره گرفته می‌شود و باید بدانیم که توابع بازگشتی، یک سینتکس یا دستور خاص در زبان پایتون نیست بلکه یک شیوه حل مسئله می‌باشد که با استفاده از تابع در زبان برنامه‌نویسی پایتون (همچون بسیاری از زبان‌های دیگر) قابل پیاده‌سازی است.
37+
38+
برای مثال در نمونه کد پایین مقدار فاکتوریل (`Factorial <https://en.wikipedia.org/wiki/Factorial>`_) عدد پنج را به شیوه بازگشتی محاسبه می‌کنیم::
39+
40+
41+
>>> def factorial(n):
42+
... if n <= 1:
43+
... return 1 # 0! == 1 and 1! == 1
44+
... else:
45+
... return n * factorial(n - 1)
46+
...
47+
>>>
48+
>>> factorial(5)
49+
120
50+
>>>
51+
52+
عموما می‌توان مسئله‌هایی که از **توالی** انجام یک **کار یکسان** قابل حل هستند را به صورت بازگشتی پیاده‌سازی کرد. مراحل اجرای نمونه کد بالا به صورت زیر است::
53+
54+
factorial(5)
55+
|--> 5 * factorial(4)
56+
|--> 4 * factorial(3)
57+
|--> 3 * factorial(2)
58+
|--> 2 * factorial(1)
59+
|--> 1
60+
61+
5 * (4 * (3 * (2 * 1)))
62+
63+
**پیاده‌سازی شیوه بازگشتی شاید به نظر هیجان‌انگیز باشد اما نباید فراموش کرد که میزان حافظه (Memory) زیادی مصرف می‌کند، اجرای آن زمان‌بر خواهد بود، درک جریان اجرای آن اغلب سخت است و اشکال‌زدایی (debug) آن ساده نخواهد بود!**
3464

3565

3666

0 commit comments

Comments
 (0)