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: Jos olet nähnyt
video rekursio,

3
00:00:07,670 --> 00:00:10,170
koko prosessi voi olla
tuntui hieman maaginen.

4
00:00:10,170 --> 00:00:10,930
Kuinka se toimii?

5
00:00:10,930 --> 00:00:15,010
Miten toiminnot tietävät, että he
täytyy odottaa ja odottaa toista arvo

6
00:00:15,010 --> 00:00:19,150
palata eri toimintoa
soittaa saadakseen tuloksen haluamme?

7
00:00:19,150 --> 00:00:22,550
>> No, syy tämä toimii, koska
jotain tunnetaan kutsupino.

8
00:00:22,550 --> 00:00:26,360
Kun soitat toiminto,
järjestelmä kumoaa muistitilaa

9
00:00:26,360 --> 00:00:28,120
että toiminto tehdä työnsä.

10
00:00:28,120 --> 00:00:31,720
Ja me kutsumme näitä paloina muistin
ollaan varattu kunkin toiminnon

11
00:00:31,720 --> 00:00:35,670
soittaa pinokehys tai toiminnon kehys.

12
00:00:35,670 --> 00:00:38,290
Ja kuten arvata saattaa,
nämä pino kehyksiä

13
00:00:38,290 --> 00:00:41,000
elää pino osa muistia.

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

15
00:00:43,960 --> 00:00:47,540
>> Useampia toimintoja pinokehys
voi esiintyä muistiin tiettynä aikana.

16
00:00:47,540 --> 00:00:51,240
Jos tärkein kutsuu funktiota liikkua,
ja liikkua kehottaa suuntaan,

17
00:00:51,240 --> 00:00:54,460
Kaikkien kolmen toiminnon on auki kehyksiä.

18
00:00:54,460 --> 00:00:57,350
Mutta kaikki eivät ole aktiivisia kehyksiä.

19
00:00:57,350 --> 00:00:59,410
Nämä kehykset on järjestetty pinoon.

20
00:00:59,410 --> 00:01:01,820
Ja kehyksen
viimeksi soittanut

21
00:01:01,820 --> 00:01:04,390
toiminto on aina päällä pinon.

22
00:01:04,390 --> 00:01:07,150
Ja että on aina aktiivinen kehys.

23
00:01:07,150 --> 00:01:10,420
On vain todella koskaan yksi
toiminto se aktiivinen kerrallaan.

24
00:01:10,420 --> 00:01:12,420
Se on päällekkäin pinon.

25
00:01:12,420 --> 00:01:17,620
>> Kun toiminto kutsuu toista
toiminto, se tavallaan painaa tauko.

26
00:01:17,620 --> 00:01:20,590
Se tavallaan on pidossa, odottamassa.

27
00:01:20,590 --> 00:01:24,050
Ja toinen pinokehys työnnetään
pinoon sen päälle.

28
00:01:24,050 --> 00:01:26,150
Ja että tulee aktiivinen kehys.

29
00:01:26,150 --> 00:01:28,600
Ja runko heti
alla se tarvitsee odottaa

30
00:01:28,600 --> 00:01:33,560
kunnes se on jälleen aktiivinen kehys
ennen kuin se voi jatkaa työtään.

31
00:01:33,560 --> 00:01:35,870
Kun toiminto on
täydellinen ja se on tehty,

32
00:01:35,870 --> 00:01:37,720
sen runko on piipahti pinosta.

33
00:01:37,720 --> 00:01:38,950
Se on terminologiaa.

34
00:01:38,950 --> 00:01:41,110
Ja runko heti
sen alla, kuten juuri sanoin,

35
00:01:41,110 --> 00:01:42,880
tulee uusi aktiivinen kehys.

36
00:01:42,880 --> 00:01:45,960
>> Ja jos se kutsuu toisen toiminnon,
se tulee keskeyttää uudelleen.

37
00:01:45,960 --> 00:01:49,290
Tämä uusi toiminto n pinon kehys
työnnetään päällimmäinen.

38
00:01:49,290 --> 00:01:50,650
Se tulee tehdä työnsä.

39
00:01:50,650 --> 00:01:52,100
Se voi pop takaisin pois.

40
00:01:52,100 --> 00:01:55,630
Ja muut toiminto
alla se voi jatkaa uudelleen.

41
00:01:55,630 --> 00:02:00,080
>> Joten mennään läpi tätä uudelleen, etsivät
klo ajatus factorial toiminto

42
00:02:00,080 --> 00:02:03,070
että me määritelty
rekursio videon nähdä

43
00:02:03,070 --> 00:02:07,770
miten taika takana
rekursiivinen prosessi on käynnissä.

44
00:02:07,770 --> 00:02:09,870
Joten tämä on meidän koko tiedosto, eikö?

45
00:02:09,870 --> 00:02:14,000
Me määritelty kaksi
functions-- tärkein ja tosiasia.

46
00:02:14,000 --> 00:02:15,980
Ja kuten voisi odottaa,
kaikki C-ohjelma on menossa

47
00:02:15,980 --> 00:02:18,470
alkamaan ensimmäisellä rivillä tärkein.

48
00:02:18,470 --> 00:02:21,660
>> Joten luomme uuden pinon kehyksen tärkein.

49
00:02:21,660 --> 00:02:23,320
Ja se tulee alkavat näkyä.

50
00:02:23,320 --> 00:02:25,270
Tärkeimmät puhelut printf.

51
00:02:25,270 --> 00:02:29,390
Ja printf on menossa
tulostaa kertoma 5.

52
00:02:29,390 --> 00:02:31,440
Hyvin, se ei tiedä
mitä kertoma 5 on,

53
00:02:31,440 --> 00:02:35,620
ja niin tämä puhelu on jo
riippuen toisen toiminnon puhelu.

54
00:02:35,620 --> 00:02:37,270
Joten tärkein aikoo keskeyttää oikeassa.

55
00:02:37,270 --> 00:02:39,103
Aion jättää sen
nuoli oikeassa, väri

56
00:02:39,103 --> 00:02:41,360
se samanvärinen kuin
pinokehys oikealla,

57
00:02:41,360 --> 00:02:47,720
osoittamaan, että tärkein aikoo jäädyttää
täällä taas kertoma 5 kutsutaan.

58
00:02:47,720 --> 00:02:49,300
>> Joten kertoma 5 kutsutaan.

59
00:02:49,300 --> 00:02:53,160
Ja se tulee aloittaa hyvin
alussa kertoma toiminnon.

60
00:02:53,160 --> 00:02:55,440
Se esittää kysymyksen olen yhtä suuri kuin 1?

61
00:02:55,440 --> 00:02:56,810
On 5 yhtä suuri kuin 1?

62
00:02:56,810 --> 00:02:57,410
No, ei.

63
00:02:57,410 --> 00:03:01,110
Joten se tulee mennä alas
muu osa, paluu n kertaa

64
00:03:01,110 --> 00:03:02,990
kertoma n miinus 1.

65
00:03:02,990 --> 00:03:03,490
No okei.

66
00:03:03,490 --> 00:03:07,070
>> Joten nyt, kertoma 5 on
riippuen toinen puhelu

67
00:03:07,070 --> 00:03:09,740
ja Kertoma, kulkee
4 kuten parametri.

68
00:03:09,740 --> 00:03:14,210
Ja niin kertoma
5 runko, että punainen kehys,

69
00:03:14,210 --> 00:03:17,160
aikoo jäädyttää oikeassa
tuohon linja olen ilmoittanut

70
00:03:17,160 --> 00:03:21,914
ja odottaa kertoma 4 loppuun
mitä se tarvitsee tehdä niin, että se

71
00:03:21,914 --> 00:03:23,330
voi tulla aktiivisen kehyksen uudelleen.

72
00:03:23,330 --> 00:03:26,890
>> Joten kertoma 4 alkaa klo
alussa kertoma.

73
00:03:26,890 --> 00:03:28,556
On 4 yhtä suuri kuin 1?

74
00:03:28,556 --> 00:03:30,180
Ei, niin se tulee tehdä sama asia.

75
00:03:30,180 --> 00:03:31,590
Se tulee alas muuta haara.

76
00:03:31,590 --> 00:03:33,240
Se tulee päästä Koodirivin.

77
00:03:33,240 --> 00:03:35,710
OK, aion palata neljä kertaa.

78
00:03:35,710 --> 00:03:41,270
Voi, kertoma on 3-- niin faktoria
4 riippuu kertoma 3 viimeistely.

79
00:03:41,270 --> 00:03:43,055
>> Ja niin se tarvitsee soittaa kertoma 3.

80
00:03:43,055 --> 00:03:45,180
Ja joka on menossa läpi
saman prosessin uudelleen.

81
00:03:45,180 --> 00:03:48,200
Se alkaa kautta, tulee tänne.

82
00:03:48,200 --> 00:03:50,980
Kertoma 3 riippuu
on kertoman 1.

83
00:03:50,980 --> 00:03:53,750
Joten kertoma 2 alkaa, tulee tänne.

84
00:03:53,750 --> 00:03:56,310
Se riippuu kertoma 1.

85
00:03:56,310 --> 00:03:57,430
Kertoman 1 alkaa.

86
00:03:57,430 --> 00:03:57,650
>> OK.

87
00:03:57,650 --> 00:03:59,775
Joten nyt, olemme pääsemässä
jonnekin mielenkiintoinen, eikö?

88
00:03:59,775 --> 00:04:02,190
Joten nyt, 1 on yhtä kuin 1.

89
00:04:02,190 --> 00:04:05,130
Ja niin palaamme 1.

90
00:04:05,130 --> 00:04:06,770
Tässä vaiheessa olemme palaamassa.

91
00:04:06,770 --> 00:04:07,880
Toiminto on tehty.

92
00:04:07,880 --> 00:04:11,140
Se käyttäytyminen is-- siellä
mitään muuta sitä tehdä,

93
00:04:11,140 --> 00:04:17,006
ja niin pino runko
kertoma 1 irtoaa.

94
00:04:17,006 --> 00:04:17,589
Se on valmis.

95
00:04:17,589 --> 00:04:19,480
Se palautti 1.

96
00:04:19,480 --> 00:04:23,370
Ja nyt, kertoma 2, joka
oli kehys sen alapuolella

97
00:04:23,370 --> 00:04:26,160
pinossa, tulee aktiivinen kehys.

98
00:04:26,160 --> 00:04:29,030
>> Ja se voi poimia
tarkalleen, mihin se jäi.

99
00:04:29,030 --> 00:04:32,240
Se on odottanut factorial
1 loppuun työnsä.

100
00:04:32,240 --> 00:04:33,610
Se on nyt valmis.

101
00:04:33,610 --> 00:04:35,510
Ja niin tässä ollaan.

102
00:04:35,510 --> 00:04:38,080
>> Kertoma 1 palasi arvo 1.

103
00:04:38,080 --> 00:04:42,430
Joten kertoma 2 CAN
vaikkapa palata 2 kertaa 1.

104
00:04:42,430 --> 00:04:43,680
Sen työ on nyt tehty.

105
00:04:43,680 --> 00:04:49,110
Se palasi 2 Factorial
3, joka odotti sitä.

106
00:04:49,110 --> 00:04:53,370
Kertoma 3 on nyt yläkehyksen,
aktiivinen kehys pinossa.

107
00:04:53,370 --> 00:04:58,617
Ja niin se sanoo, OK, hyvin, aion
palata 3 kertaa 2, joka on 6.

108
00:04:58,617 --> 00:05:00,700
Ja aion antaa siitä, että
arvostavat takaisin kertoma

109
00:05:00,700 --> 00:05:03,430
4, joka on odottanut minua.

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

111
00:05:04,500 --> 00:05:09,410
Kertoma 3 irtoaa pinon, ja
kertoma 4 on nyt aktiivinen kehys.

112
00:05:09,410 --> 00:05:13,510
>> 4 sanoo, OK, aion palata 4 kertaa
kertoma 3, mikä oli kuusi.

113
00:05:13,510 --> 00:05:15,980
Se oli arvo
kertoma 3 palasi.

114
00:05:15,980 --> 00:05:19,010
Ja niin 4 kertaa 6 on 24.

115
00:05:19,010 --> 00:05:20,990
Ja aion siirtää
että takaisin Factorial

116
00:05:20,990 --> 00:05:23,160
5, joka on odottanut minua.

117
00:05:23,160 --> 00:05:25,270
Kertoma 5 on nyt aktiivinen kehys.

118
00:05:25,270 --> 00:05:30,700
Se tulee palauttaa 5 kertaa
kertoma on 4-- 5 kertaa 24, tai 120--

119
00:05:30,700 --> 00:05:32,722
ja antaa siitä, että arvo
Takaisin, joka on

120
00:05:32,722 --> 00:05:35,680
odottanut erittäin kärsivällisesti
Kauan alareunassa pinon.

121
00:05:35,680 --> 00:05:36,640
>> Siellä se alkoi.

122
00:05:36,640 --> 00:05:37,670
Se teki tämän puhelun.

123
00:05:37,670 --> 00:05:39,400
Useat kehykset otti yläreunassa.

124
00:05:39,400 --> 00:05:41,890
Nyt takaisin pinon.

125
00:05:41,890 --> 00:05:43,450
Se on aktiivinen kehys.

126
00:05:43,450 --> 00:05:47,810
Joten tärkein sai arvon 120
takaisin kertoma 5.

127
00:05:47,810 --> 00:05:50,750
Se odottanut
tulostaa että arvo.

128
00:05:50,750 --> 00:05:51,657
Ja sitten se on tehty.

129
00:05:51,657 --> 00:05:53,240
Ei ole enää riviä koodia tärkein.

130
00:05:53,240 --> 00:05:56,800
Joten tärkein runko ponnahtaa pois
pino, ja olemme tehneet.

131
00:05:56,800 --> 00:05:58,992
>> Ja siitä rekursio toimii.

132
00:05:58,992 --> 00:06:00,200
Näin pino kehyksiä toimivat.

133
00:06:00,200 --> 00:06:03,120
Ne funktiokutsut
joka tapahtui aiemmin

134
00:06:03,120 --> 00:06:06,620
ovat juuri tauko, odottaa
annettavasta puhelut

135
00:06:06,620 --> 00:06:12,050
loppuun jotta he voivat tulla aktiivinen
runko ja lopuksi mitä he tarvitsevat.

136
00:06:12,050 --> 00:06:13,060
>> Olen Doug Lloyd.

137
00:06:13,060 --> 00:06:14,880
Tämä on CS50.

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