در این مطلب، ویدئو جداول یادداشت آسان در پایتون! با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:28:26
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,320 –> 00:00:02,639
حفظ کردن یک تکنیک فوق العاده قدرتمند
2
00:00:02,639 –> 00:00:04,160
است که در
3
00:00:04,160 –> 00:00:06,319
4
00:00:06,319 –> 00:00:07,279
طراحی الگوریتم های متوسط تا پیشرفته استفاده می
5
00:00:07,279 –> 00:00:09,920
ود و به راه حل های بازگشتی بالقوه بسیار پیچیده و بسیار ناکارآمد اجازه می دهد تا
6
00:00:09,920 –> 00:00:12,480
7
00:00:12,480 –> 00:00:15,120
ه خوبی ظریف تر و مه
8
00:00:15,120 –> 00:00:17,440
تر از آن بسیار کارآمدتر شو
9
00:00:17,440 –> 00:00:20,720
10
00:00:20,720 –> 00:00:21,920
11
00:00:21,920 –> 00:00:24,400
12
00:00:24,400 –> 00:00:25,519
د. جالب است که
13
00:00:25,519 –> 00:00:28,000
اگر این کار را به درستی انجام دهید، می توانید هر
14
00:00:28,000 –> 00:00:29,439
تابع بازگشتی را تقویت کنید
15
00:00:29,439 –> 00:00:32,238
تا بعد از استراحت [موسیقی] بیشتر در این مورد به خاطر بسپارید
16
00:00:32,238 –> 00:00:33,410
17
00:00:33,410 –> 00:00:36,239
18
00:00:36,239 –> 00:00:38,800
سلام و به یک قسمت چهارشنبه تصادفی دیگر خوش آمدید،
19
00:00:38,800 –> 00:00:40,800
20
00:00:40,800 –> 00:00:44,399
بنابراین حفظ کردن چیزهای جالبی است،
21
00:00:44,399 –> 00:00:46,160
اکنون می خواهم این را با گفتن مقدمه بیان کنم.
22
00:00:46,160 –> 00:00:47,440
که در حالی که مردم
23
00:00:47,440 –> 00:00:49,200
معمولاً در مورد حفظ کردن در
24
00:00:49,200 –> 00:00:52,079
کنار برنامهنویسی پویا صحبت میکنند
25
00:00:52,079 –> 00:00:54,239
، واقعاً لازم نیست که اینطور باشد و در
26
00:00:54,239 –> 00:00:55,440
قسمت امروز ما
27
00:00:55,440 –> 00:00:57,520
سعی میکنیم از آن دوری کنیم،
28
00:00:57,520 –> 00:00:59,760
فقط آن را به عنوان یک روش عمومی برای بهینهسازی
29
00:00:59,760 –> 00:01:00,640
بازگشت
30
00:01:00,640 –> 00:01:02,320
با آن در نظر میگیریم.
31
00:01:02,320 –> 00:01:04,400
خلاصه سریع اپیزود امروز برای
32
00:01:04,400 –> 00:01:05,760
نگاهی به برخی از چیزهایی که قرار است
33
00:01:05,760 –> 00:01:07,119
انجام دهیم برای پوشش
34
00:01:07,119 –> 00:01:08,320
، ابتدا در
35
00:01:08,320 –> 00:01:10,640
مورد اصول اولیه به خاطر سپردن
36
00:01:10,640 –> 00:01:10,960
و
37
00:01:10,960 –> 00:01:13,600
اینکه چرا به آن نیاز داریم، قبل از
38
00:01:13,600 –> 00:01:14,159
39
00:01:14,159 –> 00:01:17,280
اینکه به برنامهنویسی پایتون
40
00:01:17,280 –> 00:01:18,799
بپردازیم، شروع میکنیم، بنابراین کمی در مورد توابع مرتبه بالاتر صحبت خواهیم کرد،
41
00:01:18,799 –> 00:01:20,479
42
00:01:20,479 –> 00:01:22,560
زیرا اینگونه است. به نوعی حافظه کاری
43
00:01:22,560 –> 00:01:23,680
44
00:01:23,680 –> 00:01:25,920
را در کد خود انجام می دهیم و کدی را می نویسیم به
45
00:01:25,920 –> 00:01:27,840
طوری که برای هر
46
00:01:27,840 –> 00:01:29,200
تابع بازگشتی معینی
47
00:01:29,200 –> 00:01:31,280
می توانیم آن را تقویت کنیم، اساساً بتوانیم
48
00:01:31,280 –> 00:01:33,520
کمی از کد خود را تزریق کنیم
49
00:01:33,520 –> 00:01:36,240
و آن را به خاطر بسپاریم، بنابراین اگر می توانید
50
00:01:36,240 –> 00:01:37,600
اگر از یک
51
00:01:37,600 –> 00:01:40,000
زبان برنامه نویسی استفاده می کنید که به آن اجازه می دهد کارها را به این روش انجام دهید،
52
00:01:40,000 –> 00:01:42,079
این بسیار قدرتمند خواهد بود
53
00:01:42,079 –> 00:01:43,520
در نهایت ما کمی در
54
00:01:43,520 –> 00:01:44,720
مورد مزایا و
55
00:01:44,720 –> 00:01:47,360
معایب انجام کارها به این روش و همچنین
56
00:01:47,360 –> 00:01:49,439
اینکه تعمیم این کار چگونه است بحث خواهیم کرد. تکنیک
57
00:01:49,439 –> 00:01:49,759
به
58
00:01:49,759 –> 00:01:52,960
هر تابع بازگشتی، بنابراین
59
00:01:52,960 –> 00:01:53,840
60
00:01:53,840 –> 00:01:55,360
اگر فکر میکنید با هر یک از
61
00:01:55,360 –> 00:01:56,880
این موضوعات مشکلی ندارید، توضیحات ویدیو را باز کنید
62
00:01:56,880 –> 00:01:57,520
63
00:01:57,520 –> 00:02:00,000
یا به نوار صندلی نگاه کنید، همیشه میتوانید
64
00:02:00,000 –> 00:02:02,079
به قسمت بعدی بروید،
65
00:02:02,079 –> 00:02:04,640
بنابراین بله، بیایید ادامه دهیم و j اجازه
66
00:02:04,640 –> 00:02:06,799
دهید با مبانی
67
00:02:06,799 –> 00:02:09,280
بازگشتی و حفظ کردن شروع کنیم،
68
00:02:09,280 –> 00:02:11,920
حالا چرا ما می خواهیم یا به
69
00:02:11,920 –> 00:02:13,120
حفظ
70
00:02:13,120 –> 00:02:14,879
کردن اهمیت می دهیم بهترین راه برای درک این موضوع این است که
71
00:02:14,879 –> 00:02:17,440
ببینیم در جهان بدون آن چه اتفاقی می افتد،
72
00:02:17,440 –> 00:02:20,239
بنابراین اجازه دهید در مورد اعداد فیبوناچی صحبت کنیم،
73
00:02:20,239 –> 00:02:20,879
74
00:02:20,879 –> 00:02:23,840
مثال مورد علاقه من. توابع بازگشتی
75
00:02:23,840 –> 00:02:25,440
اشتباه رفتند،
76
00:02:25,440 –> 00:02:27,680
مشاهده می کنید که یک عدد فیبوناچی به این صورت تعریف
77
00:02:27,680 –> 00:02:28,480
78
00:02:28,480 –> 00:02:31,360
شده است، این یک رابطه بازگشتی است، اما
79
00:02:31,360 –> 00:02:32,480
مهمتر از آن،
80
00:02:32,480 –> 00:02:34,879
هر تماس بازگشتی دردناک است، زیرا
81
00:02:34,879 –> 00:02:37,120
دو تماس بازگشتی دیگر ایجاد می کند، آن دو تماس بازگشتی دیگر
82
00:02:37,120 –> 00:02:38,640
83
00:02:38,640 –> 00:02:40,720
برای برقراری چهار تماس دیگر ادامه می دهند.
84
00:02:40,720 –> 00:02:44,000
سپس 8 تماس و سپس 16 تماس بگیرید.
85
00:02:44,000 –> 00:02:46,720
هر بار که خیلی سریع رشد می کند، این عدد دو برابر می
86
00:02:46,720 –> 00:02:48,640
شود،
87
00:02:48,640 –> 00:02:51,280
بنابراین بیایید کمی کد بنویسیم
88
00:02:51,280 –> 00:02:52,400
تا ببینیم
89
00:02:52,400 –> 00:02:55,280
بله چرا این بد است، بنابراین بیایید
90
00:02:55,280 –> 00:02:58,159
با نگاهی به تابع فیبوناچی شروع کنیم
91
00:02:58,159 –> 00:03:00,159
تا ادامه دهیم. برای ایجاد یک
92
00:03:00,159 –> 00:03:03,200
تابع پایتون که nامین عدد فیبوناچی را میخواهد،
93
00:03:03,200 –> 00:03:03,840
94
00:03:03,840 –> 00:03:06,400
سپس دو حالت پایه را پیادهسازی میکنیم
95
00:03:06,400 –> 00:03:08,080
که البته دو حالتی هستند
96
00:03:08,080 –> 00:03:08,480
که در آنها
97
00:03:08,480 –> 00:03:10,720
n صفر است، در این صورت ساده میکنیم.
98
00:03:10,720 –> 00:03:12,000
99
00:03:12,000 –> 00:03:15,120
اگر یک باشد، صفر را برمی گرداند، یک را برمی گرداند، بنابراین
100
00:03:15,120 –> 00:03:16,159
این دو حالت پایه هستند،
101
00:03:16,159 –> 00:03:18,720
درست این اعداد فیبوناچی
102
00:03:18,720 –> 00:03:21,599
به هیچ عدد فیبوناچی دیگری وابسته نیستند
103
00:03:21,599 –> 00:03:25,040
که ساده است، اما برای هر مورد دیگری
104
00:03:25,040 –> 00:03:27,120
باید اعداد فیبوناچی
105
00:03:27,120 –> 00:03:29,360
را با استفاده از دو
106
00:03:29,360 –> 00:03:31,680
عدد محاسبه کنیم. در ترتیب قبل از آن بیایید
107
00:03:31,680 –> 00:03:32,480
108
00:03:32,480 –> 00:03:34,239
و البته تنها راهی که می توانیم به
109
00:03:34,239 –> 00:03:36,080
آن اعداد به دست آوریم این است که سعی
110
00:03:36,080 –> 00:03:36,480
کنیم آنها را
111
00:03:36,480 –> 00:03:39,280
با استفاده از همان تابع به صورت بازگشتی محاسبه
112
00:03:39,280 –> 00:03:40,400
کنیم تا همه چیز خوب و خوب باشد،
113
00:03:40,400 –> 00:03:42,720
من می توانم این را اجرا کنم و می
114
00:03:42,720 –> 00:03:44,560
توانم مثلاً فیب پنج را بپرسم.
115
00:03:44,560 –> 00:03:46,560
کاری که انجام خواهد داد این است که بله، ادامه خواهد داد
116
00:03:46,560 –> 00:03:47,920
و محاسبه را
117
00:03:47,920 –> 00:03:50,400
با برقراری تماس های بازگشتی در مواقع ضروری انجام می دهد،
118
00:03:50,400 –> 00:03:52,000
اکنون مشکل اینجاست
119
00:03:52,000 –> 00:03:54,000
که وقتی یک عدد فیبوناچی نسبتاً بزرگ را درخواست
120
00:03:54,000 –> 00:03:55,360
121
00:03:55,360 –> 00:03:57,519
می کنید، متوجه می شوید که رایانه من کمی
122
00:03:57,519 –> 00:03:59,439
درست می خورد که چند ثانیه طول کشید.
123
00:03:59,439 –> 00:04:01,040
چیزی که من پیدا کردم این است که اگر چند
124
00:04:01,040 –> 00:04:03,680
عدد انرژی بخواهم که کمی بزرگتر است،
125
00:04:03,680 –> 00:04:05,680
بله، ممکن است مجبور
126
00:04:05,680 –> 00:04:07,519
باشم این فرآیند را خاتمه دهم زیرا خیلی
127
00:04:07,519 –> 00:04:07,920
طول می کشد
128
00:04:07,920 –> 00:04:09,760
تا بفهمم چرا این اتفاق می
129
00:04:09,760 –> 00:04:11,200
افتد.
130
00:04:11,200 –> 00:04:13,200
برای اینکه بفهمید چرا این اتفاق می
131
00:04:13,200 –> 00:04:15,200
افتد ساده ترین راه این است که نگاهی
132
00:04:15,200 –> 00:04:17,199
به تماس های بازگشتی که در واقع
133
00:04:17,199 –> 00:04:19,040
برقرار شده اند بیندازید، دو راه برای انجام این کار وجود دارد و
134
00:04:19,040 –> 00:04:20,000
من
135
00:04:20,000 –> 00:04:22,479
ابتدا راه ساده را به شما نشان خواهم داد که دقیقاً من چیست.
136
00:04:22,479 –> 00:04:24,240
من فقط می خواهم یک بیانیه چاپی بنویسم
137
00:04:24,240 –> 00:04:24,960
138
00:04:24,960 –> 00:04:28,080
که فقط بگوید ما اکنون
139
00:04:28,080 –> 00:04:31,600
fib n منهای یک به علاوه
140
00:04:31,600 –> 00:04:34,960
فیب و منهای دو را صدا می زنیم،
141
00:04:34,960 –> 00:04:36,400
در صورتی که مطمئن نیستید من اینجا چه کار می
142
00:04:36,400 –> 00:04:38,720
کنم، این یک راه بسیار جالب
143
00:04:38,720 –> 00:04:41,600
است. برای نوشتن کد در پایتون با استفاده از این نماد f
144
00:04:41,600 –> 00:04:42,000
145
00:04:42,000 –> 00:04:43,919
در مقابل یک رشته، کاری که به شما اجازه می دهد
146
00:04:43,919 –> 00:04:45,199
انجام دهید این است که برای
147
00:04:45,199 –> 00:04:47,919
هر رشته ای در داخل گیومه ها
148
00:04:47,919 –> 00:04:49,120
آن را به عنوان
149
00:04:49,120 –> 00:04:51,600
کد واقعی پایتون در نظر بگیریم و
150
00:04:51,600 –> 00:04:52,960
پس از انجام این کار اجرا می شود و کل را قرار می دهیم.
151
00:04:52,960 –> 00:04:54,720
چیزی را با هم به یک رشته تبدیل
152
00:04:54,720 –> 00:04:57,280
کنم، به این معنی که اگر قرار بود این کد را رندر کنم
153
00:04:57,280 –> 00:04:59,120
و سپس چیزی کوچک مانند
154
00:04:59,120 –> 00:05:02,560
fib 7 را فراخوانی کنم، باید بتوانید ببینید که
155
00:05:02,560 –> 00:05:04,320
همه تماسهای واقعی درست همه
156
00:05:04,320 –> 00:05:07,039
اعداد واقعی چاپ میشوند،
157
00:05:07,039 –> 00:05:08,960
بنابراین این به ما اجازه میدهد چیز جالبی را ببینیم.
158
00:05:08,960 –> 00:05:10,800
اگر بخواهیم چیزی
159
00:05:10,800 –> 00:05:12,400
بزرگ مانند f را صدا کنیم ib20
160
00:05:12,400 –> 00:05:14,960
میتوانید ببینید که رایانهتان واقعاً چقدر کار میکند
161
00:05:14,960 –> 00:05:16,639
،
162
00:05:16,639 –> 00:05:19,759
اما نه فقط میزان
163
00:05:19,759 –> 00:05:21,199
کاری که میخواهم به آن توجه داشته باشید،
164
00:05:21,199 –> 00:05:24,000
همچنین این است که چند وقت یکبار برخی از تماسهای فلیپ
165
00:05:24,000 –> 00:05:26,240
تکرار میشوند و تعداد زیادی از تماسهای
166
00:05:26,240 –> 00:05:28,000
fib را مشاهده میکنید. تلنگر دو و
167
00:05:28,000 –> 00:05:31,120
سه تلنگر اینها هر
168
00:05:31,120 –> 00:05:33,759
بار که اکیداً لازم نیست دوباره محاسبه میشوند
169
00:05:33,759 –> 00:05:34,880
170
00:05:34,880 –> 00:05:37,440
، این جایی است که حفظ کردن مفید است،
171
00:05:37,440 –> 00:05:38,880
زیرا میبینید که هنوز ادامه دارد و من
172
00:05:38,880 –> 00:05:40,720
قبلاً مجبور شدهام کمی آن را کاهش دهم،
173
00:05:40,720 –> 00:05:42,880
بنابراین ادامه میدهم. و آن را در اینجا متوقف کنید و من
174
00:05:42,880 –> 00:05:44,400
می خواستم با شما در مورد
175
00:05:44,400 –> 00:05:47,199
یک روش جایگزین برای نگاه واقعی
176
00:05:47,199 –> 00:05:48,560
به تعداد مراحل صحبت کنم
177
00:05:48,560 –> 00:05:50,880
که زمانی که ما
178
00:05:50,880 –> 00:05:52,000
سعی می کنیم
179
00:05:52,000 –> 00:05:53,919
واقعاً راه حل خود را در پایان روز بنویسیم مفید خواهد بود،
180
00:05:53,919 –> 00:05:55,520
این تکنیکی است
181
00:05:55,520 –> 00:05:58,639
که به عنوان شناخته شده است. توابع مرتبه بالاتر
182
00:05:58,639 –> 00:06:00,560
این مبحث بعدی که توابع مرتبه بالاتر است
183
00:06:00,560 –> 00:06:01,680
184
00:06:01,680 –> 00:06:03,600
، دقیقاً چیزی نیست که همزمان با حفظ کردن درباره آن صحبت کنیم،
185
00:06:03,600 –> 00:06:05,680
186
00:06:05,680 –> 00:06:07,919
من این موضوع را در اینجا معرفی می کنم زیرا
187
00:06:07,919 –> 00:06:09,280
از این تکنیک ها برای
188
00:06:09,280 –> 00:06:11,120
کمک به ما در آینده استفاده می کنیم،
189
00:06:11,120 –> 00:06:12,880
اما cour راههای زیادی وجود
190
00:06:12,880 –> 00:06:14,880
دارد که میتوانید از طریق آنها حافظه را انجام دهید،
191
00:06:14,880 –> 00:06:17,840
اما به هر حال در اینجا این ایده وجود دارد که یک
192
00:06:17,840 –> 00:06:18,240
193
00:06:18,240 –> 00:06:21,039
تابع مرتبه اول استاندارد، برخی از دادهها را
194
00:06:21,039 –> 00:06:22,800
بر روی آن دادهها پردازش میکند
195
00:06:22,800 –> 00:06:25,919
و سپس آنها را برمیگرداند تا همه چیزهایی که در
196
00:06:25,919 –> 00:06:27,440
آن تابع جریان مییابد و از آن خارج میشود
197
00:06:27,440 –> 00:06:30,560
، داده خوب باشد. اطلاعات متغیرها،
198
00:06:30,560 –> 00:06:32,240
اما وقتی صحبت از توابع مرتبه بالاتر می شود،
199
00:06:32,240 –> 00:06:34,639
عملکرد بیشتری را انجام می دهد، یک تابع مرتبه بالاتر
200
00:06:34,639 –> 00:06:36,319
به طور بالقوه می تواند
201
00:06:36,319 –> 00:06:39,280
توابعی را به عنوان ورودی دریافت کند، می تواند برخی از
202
00:06:39,280 –> 00:06:40,160
پردازش ها
203
00:06:40,160 –> 00:06:42,400
از جمله ساخت توابع در جریان
204
00:06:42,400 –> 00:06:43,280
205
00:06:43,280 –> 00:06:45,919
و سپس بازگرداندن آنها را انجام دهد، بنابراین یک
206
00:06:45,919 –> 00:06:47,919
تابع مرتبه بالاتر مانند یک تابع متا است.
207
00:06:47,919 –> 00:06:48,720
صحبت کردن،
208
00:06:48,720 –> 00:06:50,639
زیرا در واقع می تواند
209
00:06:50,639 –> 00:06:52,160
توابع را به
210
00:06:52,160 –> 00:06:54,880
طور بالقوه دریافت کرده و حتی توابع جدید را بازگرداند
211
00:06:54,880 –> 00:06:56,400
و آن را دستکاری کند و این دقیقاً همان چیزی است که
212
00:06:56,400 –> 00:06:57,599
213
00:06:57,599 –> 00:06:59,120
ما قبل از اینکه برای نوشتن کد وارد شویم، از آن سوء استفاده می کنیم.
214
00:06:59,120 –> 00:07:00,880
215
00:07:00,880 –> 00:07:02,000
216
00:07:02,000 –> 00:07:04,560
این ایده این است که شما تابع بازگشتی خود را دارید
217
00:07:04,560 –> 00:07:05,840
218
00:07:05,840 –> 00:07:07,440
و در پایان روز ما می خواهیم به خاطر
219
00:07:07,440 –> 00:07:09,919
سپردن عملکرد شما را به درستی پیاده سازی کنیم،
220
00:07:09,919 –> 00:07:12,880
بنابراین چگونه این کار را انجام دهیم ما
221
00:07:12,880 –> 00:07:14,000
تابع شما را
222
00:07:14,000 –> 00:07:16,400
میگیریم، کدی را تزریق میکنیم که
223
00:07:16,400 –> 00:07:18,160
منطق حافظه را انجام میدهد
224
00:07:18,160 –> 00:07:20,160
، البته ما نمیتوانیم عملکرد اصلی شما را
225
00:07:20,160 –> 00:07:22,160
که قبلاً
226
00:07:22,160 –> 00:07:24,880
درست انجام شده است، تغییر دهیم، اما کاری که میتوانیم انجام دهیم این است که میتوانیم
227
00:07:24,880 –> 00:07:25,840
یک تابع جدید بسازیم
228
00:07:25,840 –> 00:07:28,400
که اطراف تابع شما را بپیچد.
229
00:07:28,400 –> 00:07:30,080
فقط تابع خود را فراخوانی کنید،
230
00:07:30,080 –> 00:07:32,240
ابتدا از منطق حافظه عبور می کند، در
231
00:07:32,240 –> 00:07:33,520
232
00:07:33,520 –> 00:07:36,160
صورت نیاز، تابع شما را فراخوانی می کند، این
233
00:07:36,160 –> 00:07:37,120
تابع جدید
234
00:07:37,120 –> 00:07:39,440
برگردانده می شود و کاری که شما باید انجام دهید این
235
00:07:39,440 –> 00:07:41,759
است که تابع اصلی خود را
236
00:07:41,759 –> 00:07:44,479
با ما با کد تقویت شده جایگزین کنید،
237
00:07:44,479 –> 00:07:46,720
منطق تقویت شده در داخل
238
00:07:46,720 –> 00:07:48,879
و اینگونه است که اساسا یک
239
00:07:48,879 –> 00:07:50,240
قابلیت اضافی
240
00:07:50,240 –> 00:07:52,000
به تابعی که شخص دیگری
241
00:07:52,000 –> 00:07:53,520
نوشته است اضافه کنید، بنابراین
242
00:07:53,520 –> 00:07:55,759
اجازه دهید قبل از صحبت در مورد حفظ کردن، ساده شروع کنیم،
243
00:07:55,759 –> 00:07:57,759
زیرا هنوز واقعاً
244
00:07:57,759 –> 00:07:59,520
آن را تعریف نکردهایم،
245
00:07:59,520 –> 00:08:03,039
بیایید سعی کنیم و فقط بشماریم، فقط با تزریق کمی شمارش ببینیم
246
00:08:03,039 –> 00:08:05,440
واقعاً فیبوناچی چقدر بد است.
247
00:08:05,440 –> 00:08:07,360
248
00:08:07,360 –> 00:08:09,759
منطقی است که البته این فرصت خوبی
249
00:08:09,759 –> 00:08:11,680
برای شماست تا به
250
00:08:11,680 –> 00:08:13,599
کل الگوی استفاده از یک
251
00:08:13,599 –> 00:08:14,080
تابع
252
00:08:14,080 –> 00:08:17,280
و تقویت آن عادت کنید. به این نکته توجه
253
00:08:17,280 –> 00:08:19,120
کنید که چگونه توابع مرتبه بالاتر می توانند
254
00:08:19,120 –> 00:08:20,879
به ما کمک کنند کاری که من می خواهم انجام دهم این است که من
255
00:08:20,879 –> 00:08:21,919
256
00:08:21,919 –> 00:08:24,960
یک تابع جدید در اینجا ایجاد می کنم به نام count
257
00:08:24,960 –> 00:08:27,759
این یک تابع خاص است زیرا پارامتر ورودی آن
258
00:08:27,759 –> 00:08:29,120
259
00:08:29,120 –> 00:08:32,080
تابع دیگری است که می توانید
260
00:08:32,080 –> 00:08:34,000
انتظار می رود کاری که این تابع قرار
261
00:08:34,000 –> 00:08:34,880
است انجام دهد این است که یک
262
00:08:34,880 –> 00:08:37,039
f می گیرد که یک تابع دیگر است،
263
00:08:37,039 –> 00:08:38,399
آن را کمی تغییر
264
00:08:38,399 –> 00:08:40,399
می دهد و نسخه اصلاح
265
00:08:40,399 –> 00:08:42,479
شده را پس می دهد، ببینیم چگونه کار می کند
266
00:08:42,479 –> 00:08:45,040
اکنون می خواهیم یک شمارنده پیاده سازی
267
00:08:45,040 –> 00:08:46,720
کنیم. این کار را به سادهترین و سادهترین
268
00:08:46,720 –> 00:08:48,080
راه انجام
269
00:08:48,080 –> 00:08:50,160
میدهم، عالی نیست، اما تحمل کنید، میخواهم
270
00:08:50,160 –> 00:08:52,320
متغیری به نام num step ایجاد
271
00:08:52,320 –> 00:08:54,000
کنم و از 0 شروع میشود.
272
00:08:54,000 –> 00:08:55,200
و اکنون کاری که میخواهم انجام دهم این است که i’
273
00:08:55,200 –> 00:08:58,080
m یک تابع افزوده ایجاد می کند،
274
00:08:58,080 –> 00:09:01,600
بنابراین این یک نسخه از f است که اکنون
275
00:09:01,600 –> 00:09:04,720
با برخی از ویژگی های شمارش افزوده شده
276
00:09:04,720 –> 00:09:07,120
است، زیرا این یک نسخه افزوده شده
277
00:09:07,120 –> 00:09:09,519
از f است و
278
00:09:09,519 –> 00:09:12,560
باید دقیقاً همان پارامترهایی را که f
279
00:09:12,560 –> 00:09:14,480
من می خواهم به آن وارد کند. فقط این را همانطور که
280
00:09:14,480 –> 00:09:16,560
در حال رفتن هستیم بنویسید برای اینکه بعداً قدرت آن را ببینم
281
00:09:16,560 –> 00:09:17,360
282
00:09:17,360 –> 00:09:19,760
خوب است، اما من اساساً می خواهم
283
00:09:19,760 –> 00:09:20,720
ستاره را
284
00:09:20,720 –> 00:09:23,920
مانند این در پایتون بنویسم. ستاره به این
285
00:09:23,920 –> 00:09:25,440
معنی است که ما نمی دانیم چند
286
00:09:25,440 –> 00:09:27,279
پارامتر در اینجا وجود دارد که می تواند
287
00:09:27,279 –> 00:09:28,320
288
00:09:28,320 –> 00:09:30,720
0 باشد. نمی دانیم و خوبی این است
289
00:09:30,720 –> 00:09:31,519
که ما
290
00:09:31,519 –> 00:09:33,920
با نوشتن آن به این شکل اهمیتی نمی دهیم، پارامترها به یک تاپل تبدیل می شوند
291
00:09:33,920 –> 00:09:35,200
که
292
00:09:35,200 –> 00:09:37,440
همه پارامترها را به
293
00:09:37,440 –> 00:09:38,240
خوبی در
294
00:09:38,240 –> 00:09:39,920
کنار هم قرار
295
00:09:39,920 –> 00:09:41,600
296
00:09:41,600 –> 00:09:43,200
می دهد. چیزی است
297
00:09:43,200 –> 00:09:45,760
و بیایید وارد شویم و شروع به تقویت
298
00:09:45,760 –> 00:09:46,399
تابع
299
00:09:46,399 –> 00:09:47,680
کنیم در اینجا نحوه
300
00:09:47,680 –> 00:09:49,839
انجام آن است اساساً تعداد f
301
00:09:49,839 –> 00:09:51,839
با تابع پس از ارسال یکسان خواهد بود
302
00:09:51,839 –> 00:09:52,959
303
00:09:52,959 –> 00:09:54,959
با این استثنا که هر بار که
304
00:09:54,959 –> 00:09:56,640
تابعی را اجرا می کنیم
305
00:09:56,640 –> 00:09:58,399
شمارنده را یک بار افزایش دهید،
306
00:09:58,399 –> 00:10:01,200
بنابراین این کار باید در دو مرحله انجام شود،
307
00:10:01,200 –> 00:10:01,760
308
00:10:01,760 –> 00:10:04,560
ابتدا میخواهم مراحل عددی جهانی را بگویم
309
00:10:04,560 –> 00:10:06,160
و دلیل اینکه میخواهم بگویم این است
310
00:10:06,160 –> 00:10:08,160
که در غیر این صورت نمیتوانم
311
00:10:08,160 –> 00:10:10,480
این متغیر را که در
312
00:10:10,480 –> 00:10:11,600
محدوده جهانی است تغییر دهم.
313
00:10:11,600 –> 00:10:13,920
پس این فقط می گوید اشکالی ندارد من می خواهم
314
00:10:13,920 –> 00:10:15,120
بتوانم این کار را انجام دهم
315
00:10:15,120 –> 00:10:17,200
و سپس تعداد
316
00:10:17,200 –> 00:10:18,160
مراحل را
317
00:10:18,160 –> 00:10:20,720
یک بار افزایش می دهم، بنابراین هر بار که این تابع
318
00:10:20,720 –> 00:10:21,279
نامیده می شود
319
00:10:21,279 –> 00:10:23,760
تعداد پله ها یک عدد بالا می رود، البته این
320
00:10:23,760 –> 00:10:24,640
تابع به تنهایی
321
00:10:24,640 –> 00:10:26,880
کاری را انجام نمی دهد. پس از
322
00:10:26,880 –> 00:10:27,920
شمارش
323
00:10:27,920 –> 00:10:30,720
در نهایت، ما هنوز باید
324
00:10:30,720 –> 00:10:32,560
تابع اصلی f را فراخوانی کنیم،
325
00:10:32,560 –> 00:10:34,720
بنابراین f تمام پارامترها را می گیرد،
326
00:10:34,720 –> 00:10:37,040
فقط می خواهیم بگوییم پارامترها
327
00:10:37,040 –> 00:10:39,600
را از بسته بندی خارج کنید و سپس آنها را
328
00:10:39,600 –> 00:10:40,399
به
329
00:10:40,399 –> 00:10:42,160
f ارسال کنید، البته ما فقط نمی خواهیم
330
00:10:42,160 –> 00:10:44,480
تابع را فراخوانی کنیم. ما میخواهیم مقدار بازگشتی آن را نیز دریافت کنیم
331
00:10:44,480 –> 00:10:46,640
و آن را به درستی برگردانیم،
332
00:10:46,640 –> 00:10:48,640
بنابراین این تابع تکمیلشده کامل
333
00:10:48,640 –> 00:10:50,160
است،
334
00:10:50,160 –> 00:10:51,519
کاری که اکنون انجام میدهم این است که ادامه دهم
335
00:10:51,519 –> 00:10:53,839
و تعداد f را
336
00:10:53,839 –> 00:10:56,880
در تابع بیرونی برگردانم، بنابراین امیدوارم این باشد
337
00:10:56,880 –> 00:10:58,880
خیلی گیج کننده نیست، اما اجازه دهید
338
00:10:58,880 –> 00:10:59,680
کمی خلاصه کنیم
339
00:10:59,680 –> 00:11:02,000
که تعداد تابع در تابعی
340
00:11:02,000 –> 00:11:03,040
به نام f
341
00:11:03,040 –> 00:11:04,800
می گیرد، یک تابع جدید
342
00:11:04,800 –> 00:11:06,240
به نام f count ساخته می شود که علاوه
343
00:11:06,240 –> 00:11:08,959
بر فراخوانی f
344
00:11:08,959 –> 00:11:10,720
، یک مرحله شمارش اضافی را
345
00:11:10,720 –> 00:11:11,279
نیز
346
00:11:11,279 –> 00:11:13,279
پس از اتمام کار انجام می دهد. با این تعریف
347
00:11:13,279 –> 00:11:15,680
ما می رویم ng برای برگرداندن تابع
348
00:11:15,680 –> 00:11:18,079
جدید، ایده کاملاً درست است، بنابراین در اینجا
349
00:11:18,079 –> 00:11:20,320
نحوه استفاده از تابع count آورده شده است،
350
00:11:20,320 –> 00:11:22,000
زیرا ما از قبل تابعی به نام
351
00:11:22,000 –> 00:11:24,320
fib داریم، بیایید به جلو برویم و آن را تقویت کنیم
352
00:11:24,320 –> 00:11:27,839
و می گوییم fib برابر است با شمارش fib
353
00:11:27,839 –> 00:11:29,279
چگونه این کار می کند
354
00:11:29,279 –> 00:11:31,200
fib قرار است در اینجا منتقل شود،
355
00:11:31,200 –> 00:11:33,200
به این صورت تقویت میشود
356
00:11:33,200 –> 00:11:35,279
و پاسخی که برگردانده میشود، تابع
357
00:11:35,279 –> 00:11:36,560
358
00:11:36,560 –> 00:11:39,120
حاصل اساساً مشابه با Flip است، به جز اینکه
359
00:11:39,120 –> 00:11:41,279
ما مقداری منطق اضافی
360
00:11:41,279 –> 00:11:44,240
برای کمک به شمارش آن با تعداد مراحل تزریق کردهایم، پس بیایید
361
00:11:44,240 –> 00:11:44,720
آن را امتحان
362
00:11:44,720 –> 00:11:47,120
کنیم. من میروم و این کد را اجرا
363
00:11:47,120 –> 00:11:48,800
میکنم، میخواهم بگویم fib 10 تماس میگیرم
364
00:11:48,800 –> 00:11:50,639
. اوه، فراموش کردم بیانیه چاپ را بیرون بیاورم مهم
365
00:11:50,639 –> 00:11:52,000
نیست،
366
00:11:52,000 –> 00:11:55,279
بنابراین این پاسخ تماس با fib 10 است،
367
00:11:55,279 –> 00:11:57,120
اما کاری که میتوانم انجام دهم این است که میتوانم چاپ کنم
368
00:11:57,120 –> 00:11:58,880
مقدار تعداد گام ها را مشخص کنید
369
00:11:58,880 –> 00:12:02,240
و می توانید ببینید که پاسخ 177 است،
370
00:12:02,240 –> 00:12:05,839
بنابراین fib 10
371
00:12:05,839 –> 00:12:08,639
برای رسیدن به پاسخ 55، 177 قدم برداشت.
372
00:12:08,639 –> 00:12:09,120
373
00:12:09,120 –> 00:12:12,240
374
00:12:12,240 –> 00:12:13,600
375
00:12:13,600 –> 00:12:16,720
376
00:12:16,720 –> 00:12:18,079
البته چند نکته در
377
00:12:18,079 –> 00:12:20,079
مورد این فناوری وجود دارد برای یکی
378
00:12:20,079 –> 00:12:22,160
که نمیتوانید
379
00:12:22,160 –> 00:12:24,320
چندین تابع را بشمارید، زیرا فقط
380
00:12:24,320 –> 00:12:26,399
یک شمارنده تعداد مراحل وجود دارد، مگر اینکه خودتان
381
00:12:26,399 –> 00:12:28,000
به مشکل بازنشانی آن بپردازید
382
00:12:28,000 –> 00:12:30,320
و علاوه بر آن
383
00:12:30,320 –> 00:12:31,760
باید مراقب باشید
384
00:12:31,760 –> 00:12:34,240
که تابع اصلی را با تابع بازنویسی کنید.
385
00:12:34,240 –> 00:12:35,519
نسخه افزوده شده
386
00:12:35,519 –> 00:12:37,279
زیرا البته تابع
387
00:12:37,279 –> 00:12:39,040
اصلی فقط به دنبال تابعی
388
00:12:39,040 –> 00:12:39,360
به نام
389
00:12:39,360 –> 00:12:41,360
fib میگردد و سپس آن را فراخوانی میکند، بنابراین اگر شما آن را با
390
00:12:41,360 –> 00:12:42,800
نام دیگری صدا بزنید، در نهایت
391
00:12:42,800 –> 00:12:44,560
تابع اصلی را فراخوانی میکنید،
392
00:12:44,560 –> 00:12:47,200
بنابراین این دو اخطار هستند که باید
393
00:12:47,200 –> 00:12:48,560
نگران آن باشید.
394
00:12:48,560 –> 00:12:50,880
در غیر این صورت،
395
00:12:50,880 –> 00:12:51,600
396
00:12:51,600 –> 00:12:53,200
اگر بخواهم ادامه دهم و
397
00:12:53,200 –> 00:12:55,360
این عبارت را بیرون بیاورم و سپس کل
398
00:12:55,360 –> 00:12:56,079
کد را دوباره
399
00:12:56,079 –> 00:12:59,200
اجرا کنم، اساساً چیزی را
400
00:12:59,200 –> 00:13:01,839
401
00:13:01,839 –> 00:13:02,320
402
00:13:02,320 –> 00:13:04,800
داریم که نیاز داریم. کمی صبر
403
00:13:04,800 –> 00:13:06,000
کنید تا پاسخ خود را دریافت کنیم،
404
00:13:06,000 –> 00:13:07,839
اما ما بیشتر به گام های بی حس در اینجا علاقه مندیم
405
00:13:07,839 –> 00:13:09,440
که به نظر می رسد
406
00:13:09,440 –> 00:13:12,160
بله، عدد بسیار بزرگی است 2.6 میلیون
407
00:13:12,160 –> 00:13:12,800
گام
408
00:13:12,800 –> 00:13:16,079
فقط برای محاسبه فیب 30. ما می توانیم بهتر انجام دهیم
409
00:13:16,079 –> 00:13:18,160
، فکر می کنم ما موفق هستیم واقعاً آماده صحبت
410
00:13:18,160 –> 00:13:20,399
در مورد یادداشت کردن هستیم، بنابراین
411
00:13:20,399 –> 00:13:22,240
بیایید وارد آن شویم، مشکل بزرگ
412
00:13:22,240 –> 00:13:23,920
تابع فیبوناچی این است که تعداد
413
00:13:23,920 –> 00:13:25,440
زیادی تماس بازگشتی
414
00:13:25,440 –> 00:13:28,160
برقرار می کند و همین باعث کندی آن می شود، اما
415
00:13:28,160 –> 00:13:30,560
بدتر از آن این است که اگر به
416
00:13:30,560 –> 00:13:32,240
417
00:13:32,240 –> 00:13:34,959
خوبی به تماس های بازگشتی نگاه کنیم. این باعث می شود متوجه شوید که
418
00:13:34,959 –> 00:13:35,920
ما حتی
419
00:13:35,920 –> 00:13:39,040
نیازی به انجام این کار نداریم، در واقع ما
420
00:13:39,040 –> 00:13:40,959
همچنان همان فراخوانی های بازگشتی را
421
00:13:40,959 –> 00:13:42,800
با همان توابع فیبوناچی
422
00:13:42,800 –> 00:13:44,639
انجام می دهیم که باید کارهای زیادی را انجام دهیم
423
00:13:44,639 –> 00:13:46,240
تا همان پاسخی را که قبلاً دیده اید به شما بدهیم.
424
00:13:46,240 –> 00:13:48,079
قبلاً
425
00:13:48,079 –> 00:13:50,320
به همین دلیل است که در برنامه نویسی پویا به درستی این موضوع به وجود می آید که
426
00:13:50,320 –> 00:13:52,399
427
00:13:52,399 –> 00:13:53,519
428
00:13:53,519 –> 00:13:55,440
مشکلات فرعی همپوشانی دارند، مفهوم پشت جدول پستانداران
429
00:13:55,440 –> 00:13:57,440
این است که اگر بدانیم
430
00:13:57,440 –> 00:13:59,519
یک فراخوانی تابع خاصی قرار
431
00:13:59,519 –> 00:14:02,480
است به ما پاسخ خاصی بدهد،
432
00:14:02,480 –> 00:14:05,680
پس از انجام آن، هنگامی که پاسخ را
433
00:14:05,680 –> 00:14:07,440
فهمیدیم، آن را می نویسیم. ما آن را در
434
00:14:07,440 –> 00:14:08,720
جایی یادداشت می کنیم تا
435
00:14:08,720 –> 00:14:11,040
اگر در آینده سعی کردم همان
436
00:14:11,040 –> 00:14:12,639
تماس بازگشتی
437
00:14:12,639 –> 00:14:15,360
را