You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lessons/l14.rst
+30Lines changed: 30 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,6 +31,36 @@
31
31
تابع بازگشتی
32
32
------------
33
33
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) آن ساده نخواهد بود!**
0 commit comments