1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
1
00:00:00,000 --> 00:00:05,587

2
00:00:05,587 --> 00:00:07,670
DOUG Lloyd: Nëse e keni parë
video mbi recursion,

3
00:00:07,670 --> 00:00:10,170
i gjithë procesi mund të ketë
dukej pak magjike.

4
00:00:10,170 --> 00:00:10,930
Si punon?

5
00:00:10,930 --> 00:00:15,010
Si mund funksionet e dinë se ata
duhet të presë dhe të presin për një tjetër vlerë

6
00:00:15,010 --> 00:00:19,150
për t'u kthyer nga një funksion të ndryshëm
të thirrur në mënyrë që të merrni rezultatin që duam?

7
00:00:19,150 --> 00:00:22,550
>> E pra, arsyeja punon kjo është për shkak se
për diçka të njohur si thirrjes rafte.

8
00:00:22,550 --> 00:00:26,360
Kur ju telefononi një funksioneve,
Sistemi i vë mënjanë hapësirë ​​në memorie

9
00:00:26,360 --> 00:00:28,120
për atë funksion për të bërë punën e saj.

10
00:00:28,120 --> 00:00:31,720
Dhe ne i quajmë këto chunks e kujtesës që
janë duke u vendosur mënjanë për çdo funksion

11
00:00:31,720 --> 00:00:35,670
thërrasë një kornizë rafte apo një kornizë funksion.

12
00:00:35,670 --> 00:00:38,290
Dhe si ju mund të presin,
Këto korniza rafte

13
00:00:38,290 --> 00:00:41,000
jetojnë në pjesën rafte e kujtesës.

14
00:00:41,000 --> 00:00:43,960

15
00:00:43,960 --> 00:00:47,540
>> Më shumë se një funksion kornizë rafte
mund të ekzistojë në kujtesë në një kohë të dhënë.

16
00:00:47,540 --> 00:00:51,240
Nëse kryesore quan një lëvizje funksion,
dhe veprim quan drejtim,

17
00:00:51,240 --> 00:00:54,460
Të tre funksionet ketë korniza të hapura.

18
00:00:54,460 --> 00:00:57,350
Por jo të gjithë kanë korniza aktive.

19
00:00:57,350 --> 00:00:59,410
Këto korniza janë të rregulluar në një pirg.

20
00:00:59,410 --> 00:01:01,820
Dhe korniza nga
quajtur më të fundit

21
00:01:01,820 --> 00:01:04,390
funksion është gjithmonë në majë të pirg.

22
00:01:04,390 --> 00:01:07,150
Dhe kjo është gjithmonë kornizë aktiv.

23
00:01:07,150 --> 00:01:10,420
Ka vetëm me të vërtetë ndonjëherë një
funksion që është aktiv në një kohë.

24
00:01:10,420 --> 00:01:12,420
Kjo është një në krye të rafte.

25
00:01:12,420 --> 00:01:17,620
>> Kur një funksion thërret një tjetër
funksion, ai lloj i shtyn pauzë.

26
00:01:17,620 --> 00:01:20,590
Kjo lloj është në pritje, në pritje.

27
00:01:20,590 --> 00:01:24,050
Dhe një tjetër kornizë rafte është shtyrë
mbi rafte në krye të saj.

28
00:01:24,050 --> 00:01:26,150
Dhe kjo bëhet kornizë aktiv.

29
00:01:26,150 --> 00:01:28,600
Dhe kornizë menjëherë
më poshtë ajo duhet të presë

30
00:01:28,600 --> 00:01:33,560
deri sa ajo është përsëri kornizë aktiv
para se të mund të rifillojë punën e saj.

31
00:01:33,560 --> 00:01:35,870
Kur një funksion është
i plotë dhe kjo është bërë,

32
00:01:35,870 --> 00:01:37,720
kornizë saj është popped off rafte.

33
00:01:37,720 --> 00:01:38,950
Kjo është terminologjia.

34
00:01:38,950 --> 00:01:41,110
Dhe kornizë menjëherë
poshtë tij, si unë vetëm i tha,

35
00:01:41,110 --> 00:01:42,880
bëhet kornizë e re aktive.

36
00:01:42,880 --> 00:01:45,960
>> Dhe në qoftë se ai e quan një funksion tjetër,
ajo do të ndalemi përsëri.

37
00:01:45,960 --> 00:01:49,290
Kornizë rafte se funksioni i ri do
të shtyhet në pjesën e sipërme të pirg.

38
00:01:49,290 --> 00:01:50,650
Ajo do të bëjë punën e saj.

39
00:01:50,650 --> 00:01:52,100
Ajo mund të pop përsëri jashtë.

40
00:01:52,100 --> 00:01:55,630
Dhe funksioni tjetër
më poshtë ai mund të rifillojë përsëri.

41
00:01:55,630 --> 00:02:00,080
>> Pra, le të kalojnë nëpër këtë përsëri, duke kërkuar
në idenë e funksionit faktorial

42
00:02:00,080 --> 00:02:03,070
ne përkufizuar në
Recursion video për të parë

43
00:02:03,070 --> 00:02:07,770
saktësisht se si magji pas kësaj
Procesi rekursive është duke u zhvilluar.

44
00:02:07,770 --> 00:02:09,870
Pra, kjo është skedari ynë e tërë, e drejtë?

45
00:02:09,870 --> 00:02:14,000
Ne përcaktuar dy
functions-- kryesor dhe fakt.

46
00:02:14,000 --> 00:02:15,980
Dhe si ne mund të presim,
ndonjë program C po ndodh

47
00:02:15,980 --> 00:02:18,470
të fillojë në rreshtin e parë të kryesore.

48
00:02:18,470 --> 00:02:21,660
>> Pra, ne të krijojë një kornizë të re rafte për kryesor.

49
00:02:21,660 --> 00:02:23,320
Dhe ajo do të fillojë running.

50
00:02:23,320 --> 00:02:25,270
Thirrjet kryesore printf.

51
00:02:25,270 --> 00:02:29,390
Dhe printf do të
shtypura nga faktorial prej 5.

52
00:02:29,390 --> 00:02:31,440
E pra, kjo nuk e di
çfarë faktorial i 5 është,

53
00:02:31,440 --> 00:02:35,620
dhe kështu që kjo thirrje është tashmë
në varësi të një tjetër telefonatë funksion.

54
00:02:35,620 --> 00:02:37,270
Pra, kryesor do të pauzë të drejtë atje.

55
00:02:37,270 --> 00:02:39,103
Unë jam gonna të lënë të saj
shigjetë e drejtë atje, ngjyra

56
00:02:39,103 --> 00:02:41,360
ajo të njëjtën ngjyrë si
rafte kornizë në të djathtë,

57
00:02:41,360 --> 00:02:47,720
për të treguar se kryesore do të ngrijë
këtu ndërsa faktorial i 5 është quajtur.

58
00:02:47,720 --> 00:02:49,300
>> Pra faktorial i 5 është quajtur.

59
00:02:49,300 --> 00:02:53,160
Dhe ajo do të fillojë në shumë
fillimi i funksionit faktorial.

60
00:02:53,160 --> 00:02:55,440
Ai shtron pyetjen jam e barabartë me 1?

61
00:02:55,440 --> 00:02:56,810
5 është e barabartë me 1?

62
00:02:56,810 --> 00:02:57,410
E pra, nuk ka.

63
00:02:57,410 --> 00:03:01,110
Kështu ajo do të zbresin në
pjesë tjetër, kthimi n herë

64
00:03:01,110 --> 00:03:02,990
faktorial i n minus 1.

65
00:03:02,990 --> 00:03:03,490
E pra, në rregull.

66
00:03:03,490 --> 00:03:07,070
>> Deri tani, faktorial i 5 është
në varësi të një tjetër telefonatë

67
00:03:07,070 --> 00:03:09,740
të faktorial, duke kaluar
në 4 si parametër.

68
00:03:09,740 --> 00:03:14,210
Dhe kështu faktorial i
5 kornizë, që kornizë të kuqe,

69
00:03:14,210 --> 00:03:17,160
do të ngrijë të drejtë ka
në këtë linjë e kam treguar

70
00:03:17,160 --> 00:03:21,914
dhe të presin për faktoriale e 4 të përfunduar
çfarë ajo ka nevojë për të bërë kështu që atëherë ajo

71
00:03:21,914 --> 00:03:23,330
mund të bëhet kuadër aktive përsëri.

72
00:03:23,330 --> 00:03:26,890
>> Pra faktorial i 4 fillon në
fillimi i faktorial.

73
00:03:26,890 --> 00:03:28,556
4 është e barabartë me 1?

74
00:03:28,556 --> 00:03:30,180
Jo, kështu që ajo do të bëjë të njëjtën gjë.

75
00:03:30,180 --> 00:03:31,590
Ajo do të shkojë poshtë tjetër degë.

76
00:03:31,590 --> 00:03:33,240
Ajo do të marrë në këtë linjë të kodit.

77
00:03:33,240 --> 00:03:35,710
OK, unë jam duke shkuar për të kthyer katër herë.

78
00:03:35,710 --> 00:03:41,270
Oh, faktorial i 3-- kështu faktorial i
4 varet faktoriale e 3 përfunduar.

79
00:03:41,270 --> 00:03:43,055
>> Dhe kështu që ajo ka nevojë për të thirrur faktoriale e 3.

80
00:03:43,055 --> 00:03:45,180
Dhe kjo është gonna të shkojnë nëpër
i njëjti proces përsëri.

81
00:03:45,180 --> 00:03:48,200
Ajo fillon me, merr këtu.

82
00:03:48,200 --> 00:03:50,980
Faktorial i 3 varet
në faktorial prej 1.

83
00:03:50,980 --> 00:03:53,750
Pra faktorial e 2 fillon, merr këtu.

84
00:03:53,750 --> 00:03:56,310
Kjo varet nga faktoriale e 1.

85
00:03:56,310 --> 00:03:57,430
Faktorial e 1 fillon.

86
00:03:57,430 --> 00:03:57,650
>> NE RREGULL.

87
00:03:57,650 --> 00:03:59,775
Deri tani, ne jemi duke marrë
diku interesant, e drejtë?

88
00:03:59,775 --> 00:04:02,190
Kështu, 1 eshte e barabarte me 1.

89
00:04:02,190 --> 00:04:05,130
Dhe kështu kthehemi 1.

90
00:04:05,130 --> 00:04:06,770
Në këtë pikë, ne jemi të kthyer.

91
00:04:06,770 --> 00:04:07,880
Është bërë funksioni.

92
00:04:07,880 --> 00:04:11,140
Është sjellje is-- ka
asgjë tjetër për atë për të bërë,

93
00:04:11,140 --> 00:04:17,006
dhe kështu kornizë rafte për
faktorial i 1 pops off.

94
00:04:17,006 --> 00:04:17,589
Është përfunduar.

95
00:04:17,589 --> 00:04:19,480
Ajo u kthye 1.

96
00:04:19,480 --> 00:04:23,370
Dhe tani, faktorial i 2, i cili
ishte korniza menjëherë poshtë saj

97
00:04:23,370 --> 00:04:26,160
në rafte, bëhet kornizë aktiv.

98
00:04:26,160 --> 00:04:29,030
>> Dhe kjo mund të marr
pikërisht aty ku u ndërpre.

99
00:04:29,030 --> 00:04:32,240
Ajo është duke pritur për një faktorial
nga 1 për të përfunduar punën e saj.

100
00:04:32,240 --> 00:04:33,610
Ajo ka mbaruar tani.

101
00:04:33,610 --> 00:04:35,510
Dhe kështu që këtu ne jemi.

102
00:04:35,510 --> 00:04:38,080
>> Faktorial nga 1 kthyer një vlerë prej 1.

103
00:04:38,080 --> 00:04:42,430
Pra faktorial i 2 mund
të themi kthehen 2 herë 1.

104
00:04:42,430 --> 00:04:43,680
Puna e saj është bërë tani.

105
00:04:43,680 --> 00:04:49,110
Është kthyer në 2 faktorial
e 3, i cili ishte duke pritur për të.

106
00:04:49,110 --> 00:04:53,370
Faktorial i 3 tani është kornizë të lartë,
korniza aktive në rafte.

107
00:04:53,370 --> 00:04:58,617
Dhe kështu ai thotë, OK, mirë, unë jam duke shkuar
për t'u kthyer 3 herë 2, e cila është 6.

108
00:04:58,617 --> 00:05:00,700
Dhe unë jam duke shkuar për të dhënë atë
vlerësojnë përsëri në faktorial

109
00:05:00,700 --> 00:05:03,430
i 4, i cili ka qenë duke pritur për mua.

110
00:05:03,430 --> 00:05:04,500
Mbarova.

111
00:05:04,500 --> 00:05:09,410
Faktorial i 3 pops off rafte, dhe
faktorial i 4 është tani kornizë aktiv.

112
00:05:09,410 --> 00:05:13,510
>> 4 thotë, OK, unë jam duke shkuar për të kthyer 4 herë
faktorial i 3, e cila ishte gjashtë.

113
00:05:13,510 --> 00:05:15,980
Kjo ishte me vlerë që
faktorial i 3 kthye.

114
00:05:15,980 --> 00:05:19,010
Dhe kështu 4 herë 6 është 24.

115
00:05:19,010 --> 00:05:20,990
Dhe unë jam duke shkuar për të kaluar
që përsëri të faktorial

116
00:05:20,990 --> 00:05:23,160
e 5, e cila është duke pritur për mua.

117
00:05:23,160 --> 00:05:25,270
Faktorial i 5 është tani kornizë aktiv.

118
00:05:25,270 --> 00:05:30,700
Ajo do të kthehen 5 herë
faktorial i 4-- 5 herë 24, ose 120--

119
00:05:30,700 --> 00:05:32,722
dhe të japë këtë vlerë
Mbrapsht në kryesore, e cila ka

120
00:05:32,722 --> 00:05:35,680
pritur shumë durim për një
kohë të gjatë në fund të rafte.

121
00:05:35,680 --> 00:05:36,640
>> Kjo është ajo ku ajo filloi.

122
00:05:36,640 --> 00:05:37,670
Ajo e bëri këtë thirrje.

123
00:05:37,670 --> 00:05:39,400
Disa korniza mori në krye.

124
00:05:39,400 --> 00:05:41,890
Ajo është tani përsëri në krye të rafte.

125
00:05:41,890 --> 00:05:43,450
Kjo është kornizë aktive.

126
00:05:43,450 --> 00:05:47,810
Pra kryesor mori vlerën 120
prapa nga faktorial i 5.

127
00:05:47,810 --> 00:05:50,750
Ajo është në pritje për
shtypura nga atë vlerë.

128
00:05:50,750 --> 00:05:51,657
Dhe pastaj është bërë.

129
00:05:51,657 --> 00:05:53,240
Nuk ka më shumë rreshta të kodit në kryesore.

130
00:05:53,240 --> 00:05:56,800
Pra, kornizë kryesore të pops off
rafte, dhe ne jemi duke bërë.

131
00:05:56,800 --> 00:05:58,992
>> Dhe kjo është se si funksionon recursion.

132
00:05:58,992 --> 00:06:00,200
Kjo është se si të punojnë korniza rafte.

133
00:06:00,200 --> 00:06:03,120
Këto thirrje funksion
që ka ndodhur më parë

134
00:06:03,120 --> 00:06:06,620
janë vetëm në pauzë, duke pritur
për thirrjet pasuese

135
00:06:06,620 --> 00:06:12,050
të përfundojë në mënyrë që ata mund të bëhet aktive
kornizë dhe të përfundojë se çfarë ata duhet të bëjnë.

136
00:06:12,050 --> 00:06:13,060
>> Unë jam Doug Lloyd.

137
00:06:13,060 --> 00:06:14,880
Kjo është CS50.

138
00:06:14,880 --> 00:06:16,580