1 00:00:00,000 --> 00:00:05,587 2 00:00:05,587 --> 00:00:07,670 DOUG LLOYD: Os ydych chi wedi gweld y fideo ar recursion, 3 00:00:07,670 --> 00:00:10,170 Efallai y broses gyfan yn cael ymddangos ychydig yn hudol. 4 00:00:10,170 --> 00:00:10,930 Sut mae'n gweithio? 5 00:00:10,930 --> 00:00:15,010 Sut mae'r swyddogaethau yn gwybod eu bod yn Mae angen i chi aros ac aros am werth arall 6 00:00:15,010 --> 00:00:19,150 i ddychwelyd o swyddogaeth wahanol galw i mewn er mwyn cael y canlyniad yr ydym am ei gael? 7 00:00:19,150 --> 00:00:22,550 >> Wel, y rheswm mae hyn yn gweithio yw oherwydd o rywbeth a elwir yn pentwr alwad. 8 00:00:22,550 --> 00:00:26,360 Pan fyddwch yn galw swyddogaeth, mae'r system yn neilltuo lle yn y cof 9 00:00:26,360 --> 00:00:28,120 ar gyfer y swyddogaeth honno i wneud ei waith. 10 00:00:28,120 --> 00:00:31,720 Ac rydym yn galw darnau hyn o gof sy'n yn cael eu neilltuo ar gyfer pob swyddogaeth 11 00:00:31,720 --> 00:00:35,670 ffoniwch ffrâm pentwr neu ffrâm swyddogaeth. 12 00:00:35,670 --> 00:00:38,290 Ac fel y gallech ddisgwyl, fframiau stac hyn 13 00:00:38,290 --> 00:00:41,000 byw ar y rhan pentwr o gof. 14 00:00:41,000 --> 00:00:43,960 15 00:00:43,960 --> 00:00:47,540 >> Ffrâm pentwr Mae mwy nag un swyddogaeth Gall bodoli mewn cof ar adeg benodol. 16 00:00:47,540 --> 00:00:51,240 Os prif galw symudiad swyddogaeth, a symud galwadau cyfeiriad, 17 00:00:51,240 --> 00:00:54,460 pob tair swyddogaeth yn cael fframiau agored. 18 00:00:54,460 --> 00:00:57,350 Ond nid yw pob oes ganddynt fframiau gweithredol. 19 00:00:57,350 --> 00:00:59,410 Mae'r fframiau yn cael eu trefnu mewn pentwr. 20 00:00:59,410 --> 00:01:01,820 Ac y ffrâm oddi wrth y Gelwir fwyaf diweddar 21 00:01:01,820 --> 00:01:04,390 swyddogaeth yw bob amser ar ben y pentwr. 22 00:01:04,390 --> 00:01:07,150 A dyna y ffrâm weithredol bob amser. 23 00:01:07,150 --> 00:01:10,420 Dim ond 'n sylweddol erioed un swyddogaeth sy'n weithredol ar y tro. 24 00:01:10,420 --> 00:01:12,420 Mae'n y naill ar ben y pentwr. 25 00:01:12,420 --> 00:01:17,620 >> Pan fydd swyddogaeth yn galw un arall swyddogaeth, mae'n fath o gweisg oedi. 26 00:01:17,620 --> 00:01:20,590 Mae'n fath o wedi'i ohirio, yn aros. 27 00:01:20,590 --> 00:01:24,050 A ffrâm pentwr arall yn cael ei wthio ar y pentwr ar ei ben. 28 00:01:24,050 --> 00:01:26,150 A bod yn dod yn y ffrâm weithredol. 29 00:01:26,150 --> 00:01:28,600 Ac yn y ffrâm ar unwaith isod mae angen i chi aros 30 00:01:28,600 --> 00:01:33,560 nes ei fod yn unwaith eto y ffrâm weithredol cyn y gall ailddechrau ei waith. 31 00:01:33,560 --> 00:01:35,870 Pan fydd swyddogaeth yw yn gyflawn ac mae'n ei wneud, 32 00:01:35,870 --> 00:01:37,720 ei ffrâm yn cael ei popped oddi ar y pentwr. 33 00:01:37,720 --> 00:01:38,950 Dyna y derminoleg. 34 00:01:38,950 --> 00:01:41,110 Ac yn y ffrâm ar unwaith islaw iddo, fel yr wyf newydd ei ddweud, 35 00:01:41,110 --> 00:01:42,880 yn dod yn ffrâm gweithredol newydd. 36 00:01:42,880 --> 00:01:45,960 >> Ac os bydd yn galw swyddogaeth arall, mae'n mynd i oedi eto. 37 00:01:45,960 --> 00:01:49,290 Ffrâm pentwr swyddogaeth honno newydd fydd gael ei wthio ar ben y pentwr. 38 00:01:49,290 --> 00:01:50,650 Bydd yn gwneud ei waith. 39 00:01:50,650 --> 00:01:52,100 Gallai fod pop yn ôl i ffwrdd. 40 00:01:52,100 --> 00:01:55,630 A'r swyddogaeth arall isod y gall ailddechrau eto. 41 00:01:55,630 --> 00:02:00,080 >> Felly gadewch i ni fynd drwy hyn eto, gan edrych ar y syniad o swyddogaeth ffactoraidd 42 00:02:00,080 --> 00:02:03,070 ein bod yn diffinio yn y recursion fideo i weld 43 00:02:03,070 --> 00:02:07,770 yn union sut mae'r hud tu ôl i hyn proses ailadroddus yn digwydd. 44 00:02:07,770 --> 00:02:09,870 Felly mae hyn yn ein ffeil gyfan, dde? 45 00:02:09,870 --> 00:02:14,000 Rydym yn diffinio dau functions-- brif a ffaith. 46 00:02:14,000 --> 00:02:15,980 Ac fel y gallem ddisgwyl, unrhyw raglen C yn mynd 47 00:02:15,980 --> 00:02:18,470 i ddechrau ar y llinell gyntaf o brif. 48 00:02:18,470 --> 00:02:21,660 >> Felly, rydym yn creu ffrâm pentwr newydd ar gyfer prif. 49 00:02:21,660 --> 00:02:23,320 Ac mae'n mynd i ddechrau rhedeg. 50 00:02:23,320 --> 00:02:25,270 Prif galwadau printf. 51 00:02:25,270 --> 00:02:29,390 A printf yn mynd i argraffu ffactoraidd o 5. 52 00:02:29,390 --> 00:02:31,440 Wel, nid yw'n gwybod pa ffactoraidd o 5 yw, 53 00:02:31,440 --> 00:02:35,620 ac felly alwad hon eisoes gan ddibynnu ar alwad swyddogaeth arall. 54 00:02:35,620 --> 00:02:37,270 Felly prif yn mynd i oedi iawn yno. 55 00:02:37,270 --> 00:02:39,103 Im 'gonna yn gadael ei arrow iawn yno, lliw 56 00:02:39,103 --> 00:02:41,360 mae'n yr un lliw â'r pentwr ffrâm ar y dde, 57 00:02:41,360 --> 00:02:47,720 i nodi bod prif yn mynd i rewi yma tra gelwir ffactoraidd o 5. 58 00:02:47,720 --> 00:02:49,300 >> Felly ffactoraidd o 5 yn cael ei alw. 59 00:02:49,300 --> 00:02:53,160 Ac mae'n mynd i ddechrau ar yr union gan ddechrau o'r swyddogaeth ffactoraidd. 60 00:02:53,160 --> 00:02:55,440 Mae'n yn gofyn y cwestiwn ydw i'n cyfartal i 1? 61 00:02:55,440 --> 00:02:56,810 A yw 5 hafal i 1? 62 00:02:56,810 --> 00:02:57,410 Wel, dim. 63 00:02:57,410 --> 00:03:01,110 Felly, mae'n mynd i fynd i lawr i y arall rhannol, yn dychwelyd n amserau 64 00:03:01,110 --> 00:03:02,990 ffactorial n minws 1. 65 00:03:02,990 --> 00:03:03,490 Wel, OK. 66 00:03:03,490 --> 00:03:07,070 >> Felly nawr, ffactor o 5 yw yn dibynnu ar alwad arall 67 00:03:07,070 --> 00:03:09,740 i ffactoraidd, gan fynd heibio yn 4 fel y paramedr. 68 00:03:09,740 --> 00:03:14,210 Ac felly y ffactoraidd o 5 ffrâm, y ffrâm coch, 69 00:03:14,210 --> 00:03:17,160 yn mynd i rewi iawn yno ar y llinell rwyf wedi nodi 70 00:03:17,160 --> 00:03:21,914 ac yn aros am ffactor o 4 i orffen yr hyn y mae angen iddo ei wneud fel bod yna mae'n 71 00:03:21,914 --> 00:03:23,330 Gall dod yn y ffrâm weithredol eto. 72 00:03:23,330 --> 00:03:26,890 >> Felly ffactorial o 4 yn dechrau am ddechrau ffactoraidd. 73 00:03:26,890 --> 00:03:28,556 Yw 4 hafal i 1? 74 00:03:28,556 --> 00:03:30,180 Na, felly mae'n mynd i wneud yr un peth. 75 00:03:30,180 --> 00:03:31,590 Mae'n mynd i fynd i lawr y gangen arall. 76 00:03:31,590 --> 00:03:33,240 Mae'n mynd i gyrraedd y llinell o god. 77 00:03:33,240 --> 00:03:35,710 OK, dw i'n mynd i ddychwelyd bedair gwaith. 78 00:03:35,710 --> 00:03:41,270 O, ffactoraidd o 3-- felly ffactoraidd o 4 yn dibynnu ar ffactor o 3 gorffen. 79 00:03:41,270 --> 00:03:43,055 >> Ac felly mae angen i alw ffactoraidd o 3. 80 00:03:43,055 --> 00:03:45,180 Ac mae hynny'n gonna yn mynd trwy yr un broses eto. 81 00:03:45,180 --> 00:03:48,200 Mae'n dechrau trwy, yn cael yma. 82 00:03:48,200 --> 00:03:50,980 Ffactorial o 3 yn dibynnu ar ffactoraidd o 1. 83 00:03:50,980 --> 00:03:53,750 Felly ffactoraidd o 2 yn dechrau, yn cael yma. 84 00:03:53,750 --> 00:03:56,310 Mae'n dibynnu ar ffactor o 1. 85 00:03:56,310 --> 00:03:57,430 Ffactorial o yn dechrau 1. 86 00:03:57,430 --> 00:03:57,650 >> IAWN. 87 00:03:57,650 --> 00:03:59,775 Felly nawr, rydym yn cael rhywle diddorol, dde? 88 00:03:59,775 --> 00:04:02,190 Felly nawr, 1 yn hafal i 1. 89 00:04:02,190 --> 00:04:05,130 Ac felly byddwn yn dychwelyd 1. 90 00:04:05,130 --> 00:04:06,770 Ar y pwynt hwn, rydym yn dychwelyd. 91 00:04:06,770 --> 00:04:07,880 Mae'r swyddogaeth ei wneud. 92 00:04:07,880 --> 00:04:11,140 Mae'n yw-- ymddygiad mae dim byd arall iddo wneud, 93 00:04:11,140 --> 00:04:17,006 ac felly roedd y ffrâm pentwr ar gyfer ffactorial o 1 pops i ffwrdd. 94 00:04:17,006 --> 00:04:17,589 Mae wedi gorffen. 95 00:04:17,589 --> 00:04:19,480 Mae'n Dychwelodd 1. 96 00:04:19,480 --> 00:04:23,370 Ac yn awr, ffactorial o 2, a oedd yn Roedd y ffrâm union islaw iddo 97 00:04:23,370 --> 00:04:26,160 yn y pentwr, yn dod yn y ffrâm weithredol. 98 00:04:26,160 --> 00:04:29,030 >> Ac mae'n gallu codi'r yn union lle mae'n chwith oddi. 99 00:04:29,030 --> 00:04:32,240 Mae wedi bod yn aros am ffactoraidd o 1 i orffen ei waith. 100 00:04:32,240 --> 00:04:33,610 Mae bellach wedi dod i ben. 101 00:04:33,610 --> 00:04:35,510 Ac felly dyma ni. 102 00:04:35,510 --> 00:04:38,080 >> Ffactorial o 1 dychwelodd gwerth o 1. 103 00:04:38,080 --> 00:04:42,430 Felly ffactoraidd o 2 can dyweder yn dychwelyd 2 waith 1. 104 00:04:42,430 --> 00:04:43,680 Mae ei waith yn cael ei wneud yn awr. 105 00:04:43,680 --> 00:04:49,110 Mae'n dychwelodd 2 i ffactoraidd o 3, a oedd yn aros ar ei gyfer. 106 00:04:49,110 --> 00:04:53,370 Ffactorial o 3 yn awr yn y ffrâm uchaf, y ffrâm weithredol yn y pentwr. 107 00:04:53,370 --> 00:04:58,617 Ac felly y mae'n ei ddweud, OK, wel, dw i'n mynd i ddychwelyd 3 gwaith 2, sydd 6. 108 00:04:58,617 --> 00:05:00,700 Ac yr wyf i'n mynd i roi y gwerthfawrogi yn ôl i ffactoraidd 109 00:05:00,700 --> 00:05:03,430 o 4, sydd wedi bod yn aros i mi. 110 00:05:03,430 --> 00:05:04,500 Dwi wedi gorffen. 111 00:05:04,500 --> 00:05:09,410 Ffactorial o 3 pops oddi ar y pentwr, ac ffactorial o 4 yn awr yn y ffrâm weithredol. 112 00:05:09,410 --> 00:05:13,510 >> 4 yn dweud, OK, dw i'n mynd i ddychwelyd 4 gwaith ffactorial 3, a oedd yn chwech. 113 00:05:13,510 --> 00:05:15,980 Dyna oedd o werth y ffactorial o 3 dychwelyd. 114 00:05:15,980 --> 00:05:19,010 Ac felly 4 gwaith 6 yw 24. 115 00:05:19,010 --> 00:05:20,990 Ac yr wyf i'n mynd i basio bod yn ôl i ffactoraidd 116 00:05:20,990 --> 00:05:23,160 o 5, sydd wedi bod yn aros i mi. 117 00:05:23,160 --> 00:05:25,270 Ffactorial o 5 yn awr yn y ffrâm weithredol. 118 00:05:25,270 --> 00:05:30,700 Mae'n mynd i ddychwelyd 5 gwaith ffactoraidd o 4-- 5 gwaith 24, neu 120-- 119 00:05:30,700 --> 00:05:32,722 ac yn rhoi y gwerth yn ôl i'r brif, sydd wedi 120 00:05:32,722 --> 00:05:35,680 bod yn aros yn amyneddgar iawn ar gyfer amser hir ar waelod y pentwr. 121 00:05:35,680 --> 00:05:36,640 >> Mae'n lle iddo ddechrau. 122 00:05:36,640 --> 00:05:37,670 Roedd yn gwneud yr alwad hon. 123 00:05:37,670 --> 00:05:39,400 Cymerodd nifer fframiau drosodd ar y brig. 124 00:05:39,400 --> 00:05:41,890 Mae bellach yn ôl ar ben y pentwr. 125 00:05:41,890 --> 00:05:43,450 Mae'n y ffrâm weithredol. 126 00:05:43,450 --> 00:05:47,810 Felly prif got y gwerth 120 yn ôl o ffactoraidd o 5. 127 00:05:47,810 --> 00:05:50,750 Mae wedi bod yn aros i argraffwch y gwerth. 128 00:05:50,750 --> 00:05:51,657 Ac yna mae'n ei wneud. 129 00:05:51,657 --> 00:05:53,240 Dim mae mwy o god llinellau yn y prif. 130 00:05:53,240 --> 00:05:56,800 Felly prif ffrâm yn pops i ffwrdd y pentwr, ac rydym yn ei wneud. 131 00:05:56,800 --> 00:05:58,992 >> A dyna sut y dychweliad yn gweithio. 132 00:05:58,992 --> 00:06:00,200 Dyna sut fframiau stac yn gweithio. 133 00:06:00,200 --> 00:06:03,120 Mae'r rhai galwadau swyddogaeth sydd wedi digwydd yn flaenorol 134 00:06:03,120 --> 00:06:06,620 yn unig ar oedi, aros gyfer y galwadau dilynol 135 00:06:06,620 --> 00:06:12,050 i orffen fel y gallant ddod yn weithgar ffrâm a orffen yr hyn sydd angen iddynt ei wneud. 136 00:06:12,050 --> 00:06:13,060 >> Rwy'n Doug Lloyd. 137 00:06:13,060 --> 00:06:14,880 Mae hyn yn CS50. 138 00:06:14,880 --> 00:06:16,580