1 00:00:00,000 --> 00:00:05,587 2 00:00:05,587 --> 00:00:07,670 DOUG LLOYD: Má tá tú ag feiceáil an físeán ar recursion, 3 00:00:07,670 --> 00:00:10,170 D'fhéadfadh an próiseas iomlán acu chuma le beagán draíochta. 4 00:00:10,170 --> 00:00:10,930 Conas a oibríonn sé? 5 00:00:10,930 --> 00:00:15,010 Cén chaoi a fhios na feidhmeanna go bhfuil siad Ní mór fanacht agus fanacht as luach eile 6 00:00:15,010 --> 00:00:19,150 a thabhairt ar ais ó feidhm difriúil glaoch chun a fháil ar an toradh ba mhaith linn? 7 00:00:19,150 --> 00:00:22,550 >> Bhuel, is é an chúis oibríonn sé seo mar gheall ar de rud éigin ar a dtugtar an chairn glaoch. 8 00:00:22,550 --> 00:00:26,360 Nuair a ghlaonn tú feidhm, an Leagann an córas ar leataobh spás i gcuimhne 9 00:00:26,360 --> 00:00:28,120 don fheidhm a dhéanamh ar a chuid oibre. 10 00:00:28,120 --> 00:00:31,720 Agus muid ag glaoch ar na smután de chuimhne go á chur ar leataobh do gach feidhm 11 00:00:31,720 --> 00:00:35,670 glaoch fráma cruaiche nó fráma feidhm. 12 00:00:35,670 --> 00:00:38,290 Agus mar a d'fhéadfadh a bheith ag súil, na frámaí Stack 13 00:00:38,290 --> 00:00:41,000 beo ar an chuid chairn de chuimhne. 14 00:00:41,000 --> 00:00:43,960 15 00:00:43,960 --> 00:00:47,540 >> Fráma cruaiche feidhm níos mó ná aon Is féidir bheith ann i gcuimhne ag am ar leith. 16 00:00:47,540 --> 00:00:51,240 Má iarrann mó bogadh feidhm, agus glaonna bogadh treo, 17 00:00:51,240 --> 00:00:54,460 tá na trí feidhmeanna frámaí oscailte. 18 00:00:54,460 --> 00:00:57,350 Ach ní léir bhfuil siad frámaí gníomhach. 19 00:00:57,350 --> 00:00:59,410 Tá na frámaí eagraithe i Stack. 20 00:00:59,410 --> 00:01:01,820 Agus an fráma ó na ar a dtugtar an chuid is mó le déanaí 21 00:01:01,820 --> 00:01:04,390 Is é feidhm i gcónaí ar bharr an chairn. 22 00:01:04,390 --> 00:01:07,150 Agus is é sin i gcónaí ar an fráma gníomhach. 23 00:01:07,150 --> 00:01:10,420 Níl ach i ndáiríre riamh amháin fheidhm sin gníomhach ag an am. 24 00:01:10,420 --> 00:01:12,420 Tá sé an ceann ar bharr an chairn. 25 00:01:12,420 --> 00:01:17,620 >> Nuair a iarrann feidhm eile fheidhm, saghas cófraí ​​sé sos. 26 00:01:17,620 --> 00:01:20,590 Tá sé saghas ar a shealbhú, ag fanacht. 27 00:01:20,590 --> 00:01:24,050 Agus is é fráma cruaiche eile bhrú isteach ar an chairn ar a bharr. 28 00:01:24,050 --> 00:01:26,150 Agus éiríonn go bhfuil an fráma gníomhach. 29 00:01:26,150 --> 00:01:28,600 Agus an fráma láithreach thíos mór é a fanacht 30 00:01:28,600 --> 00:01:33,560 dtí go bhfuil sé arís an fráma gníomhach sular féidir é a atosú a chuid oibre. 31 00:01:33,560 --> 00:01:35,870 Nuair a bhíonn feidhm iomlán agus é a dhéanamh, 32 00:01:35,870 --> 00:01:37,720 tá a fráma popped as an chairn. 33 00:01:37,720 --> 00:01:38,950 Sin an téarmaíocht. 34 00:01:38,950 --> 00:01:41,110 Agus an fráma láithreach faoi ​​bhun sé, mar a dúirt mé díreach tar éis, 35 00:01:41,110 --> 00:01:42,880 thiocfaidh chun bheith an fráma gníomhach nua. 36 00:01:42,880 --> 00:01:45,960 >> Agus má iarrann sé an fheidhm eile, tá sé ag dul chun sos arís. 37 00:01:45,960 --> 00:01:49,290 Beidh fráma cruaiche go feidhm nua ar a bhrú ar an barr an chairn. 38 00:01:49,290 --> 00:01:50,650 Beidh sé a dhéanamh a chuid oibre. 39 00:01:50,650 --> 00:01:52,100 D'fhéadfadh sé pop ais as. 40 00:01:52,100 --> 00:01:55,630 Agus an fheidhm eile thíos is féidir é a atosú arís. 41 00:01:55,630 --> 00:02:00,080 >> Mar sin, a ligean ar dul tríd an arís, ag lorg ag an smaoineamh na feidhme factorial 42 00:02:00,080 --> 00:02:03,070 go shainmhínítear muid sa recursion físeáin a fheiceáil 43 00:02:03,070 --> 00:02:07,770 go cruinn conas an draíocht taobh thiar de seo Tá próiseas Athchúrsach siúl. 44 00:02:07,770 --> 00:02:09,870 Mar sin, is é seo ár comhad iomlán, ceart? 45 00:02:09,870 --> 00:02:14,000 Shainmhínítear muid beirt functions-- is mó agus go deimhin. 46 00:02:14,000 --> 00:02:15,980 Agus mar a d'fhéadfadh muid ag súil, Tá aon chlár C ag dul 47 00:02:15,980 --> 00:02:18,470 chun tús a chur ag an chéad líne is mó. 48 00:02:18,470 --> 00:02:21,660 >> Mar sin, táimid a chruthú fráma cruaiche nua do phríomh. 49 00:02:21,660 --> 00:02:23,320 Agus tá sé ag dul chun tús a reáchtáil. 50 00:02:23,320 --> 00:02:25,270 Glaonna is mó printf. 51 00:02:25,270 --> 00:02:29,390 Agus is é printf ag dul go dtí phriontáil amach factorial de 5. 52 00:02:29,390 --> 00:02:31,440 Bhuel, ní chuireann sé a fhios cén factorial de 5, 53 00:02:31,440 --> 00:02:35,620 agus mar sin tá an nglao cheana ag brath ar glaoch feidhm eile. 54 00:02:35,620 --> 00:02:37,270 Mar sin, is mó ag dul chun sos ceart ann. 55 00:02:37,270 --> 00:02:39,103 Tá mé ag dul a fhágáil ar a arrow ceart ann, dath 56 00:02:39,103 --> 00:02:41,360 sé an dath céanna leis an Stack fráma ar an gceart, 57 00:02:41,360 --> 00:02:47,720 a chur in iúl go bhfuil príomh-dul a reo anseo cé go bhfuil factorial de 5 dtugtar. 58 00:02:47,720 --> 00:02:49,300 >> Mar sin, factorial de 5 dtugtar. 59 00:02:49,300 --> 00:02:53,160 Agus tá sé ag dul chun tús a chur ag an an- ag tosú ar an bhfeidhm factorial. 60 00:02:53,160 --> 00:02:55,440 Iarrann sé ar an gceist Táim comhionann I a ghabhann le 1? 61 00:02:55,440 --> 00:02:56,810 Is 5 cothrom le 1? 62 00:02:56,810 --> 00:02:57,410 Bhuel, uimh. 63 00:02:57,410 --> 00:03:01,110 Mar sin, tá sé ag dul chun dul síos go dtí an chuid eile, ar ais n amanna 64 00:03:01,110 --> 00:03:02,990 factorial de n lúide 1. 65 00:03:02,990 --> 00:03:03,490 Bhuel, ceart go leor. 66 00:03:03,490 --> 00:03:07,070 >> Mar sin anois, tá factorial de 5 ag brath ar glao-dhualgas eile 67 00:03:07,070 --> 00:03:09,740 a factorial, a rith i 4 mar an paraiméadar. 68 00:03:09,740 --> 00:03:14,210 Agus mar sin an factorial de 5 fhráma, go fráma dearg, 69 00:03:14,210 --> 00:03:17,160 ag dul a reo ceart ann ag an líne a bhfuil mé in iúl 70 00:03:17,160 --> 00:03:21,914 agus fanacht as factorial de 4 a chríochnú cad is gá é sin a dhéanamh go ansin é 71 00:03:21,914 --> 00:03:23,330 Is féidir a bheith ar an fráma gníomhach arís. 72 00:03:23,330 --> 00:03:26,890 >> Mar sin, factorial de 4 thosaíonn ag an tús factorial. 73 00:03:26,890 --> 00:03:28,556 Is 4 cothrom le 1? 74 00:03:28,556 --> 00:03:30,180 Níl, mar sin tá sé ag dul a dhéanamh ar an rud céanna. 75 00:03:30,180 --> 00:03:31,590 Tá sé ag dul chun dul síos an brainse eile. 76 00:03:31,590 --> 00:03:33,240 Tá sé seo ag dul a fháil chun an líne de chód. 77 00:03:33,240 --> 00:03:35,710 OK, tá mé ag dul a thabhairt ar ais ceithre huaire. 78 00:03:35,710 --> 00:03:41,270 Oh, factorial de 3-- factorial sin de 4 brath ar factorial de 3 críochnú. 79 00:03:41,270 --> 00:03:43,055 >> Agus mar sin ní mór é factorial de 3 a ghlaoch. 80 00:03:43,055 --> 00:03:45,180 Agus sin ag dul a dul tríd an bpróiseas céanna arís. 81 00:03:45,180 --> 00:03:48,200 Tosaíonn sé trí, faigheann anseo. 82 00:03:48,200 --> 00:03:50,980 Factorial de 3 Braitheann ar factorial de 1. 83 00:03:50,980 --> 00:03:53,750 Mar sin, factorial de 2 thosaíonn faigheann, anseo. 84 00:03:53,750 --> 00:03:56,310 Braitheann sé ar factorial de 1. 85 00:03:56,310 --> 00:03:57,430 Factorial de 1 thosaíonn. 86 00:03:57,430 --> 00:03:57,650 >> OK. 87 00:03:57,650 --> 00:03:59,775 Mar sin anois, tá muid ag dul áit éigin suimiúil, ceart? 88 00:03:59,775 --> 00:04:02,190 Mar sin anois, tá 1 cothrom le 1. 89 00:04:02,190 --> 00:04:05,130 Agus mar sin táimid ag filleadh 1. 90 00:04:05,130 --> 00:04:06,770 Ag an bpointe seo, tá muid ag filleadh. 91 00:04:06,770 --> 00:04:07,880 Tá an fheidhm a dhéanamh. 92 00:04:07,880 --> 00:04:11,140 Tá sé is-- iompar níl rud ar bith eile chun é sin a dhéanamh, 93 00:04:11,140 --> 00:04:17,006 agus mar sin an fráma cruaiche le haghaidh factorial de 1 Vox amach. 94 00:04:17,006 --> 00:04:17,589 Tá sé seo críochnaithe. 95 00:04:17,589 --> 00:04:19,480 D'fhill sé 1. 96 00:04:19,480 --> 00:04:23,370 Agus anois, factorial de 2, a ba é an fráma díreach faoi bhun sé 97 00:04:23,370 --> 00:04:26,160 sa Stack thiocfaidh chun bheith, an fráma gníomhach. 98 00:04:26,160 --> 00:04:29,030 >> Agus is féidir é a phiocadh suas go díreach nuair a d'fhág sé as. 99 00:04:29,030 --> 00:04:32,240 Baineann sé le bheith ag fanacht le factorial de 1 a chríochnú a chuid oibre. 100 00:04:32,240 --> 00:04:33,610 Tá sé tar éis críochnaithe anois. 101 00:04:33,610 --> 00:04:35,510 Agus mar sin anseo tá muid. 102 00:04:35,510 --> 00:04:38,080 >> Factorial de 1 ar ais luach de 1. 103 00:04:38,080 --> 00:04:42,430 Mar sin, factorial de 2 féidir rá ar ais 1 2 uair. 104 00:04:42,430 --> 00:04:43,680 Is é a obair atá déanta anois. 105 00:04:43,680 --> 00:04:49,110 Tá sé seo ar ais 2 go factorial de 3, a bhí ina ag fanacht air. 106 00:04:49,110 --> 00:04:53,370 Factorial de 3 atá anois ar an fráma barr, an fráma gníomhach sa chairn. 107 00:04:53,370 --> 00:04:58,617 Agus mar sin deir sé, OK, go maith, tá mé ag dul a thabhairt ar ais 3 huaire 2, a bhfuil 6. 108 00:04:58,617 --> 00:05:00,700 Agus tá mé ag dul a thabhairt go Is mór ar ais go dtí factorial 109 00:05:00,700 --> 00:05:03,430 de 4, bhfuil curtha ag fanacht liom. 110 00:05:03,430 --> 00:05:04,500 Tá mé críochnaithe. 111 00:05:04,500 --> 00:05:09,410 Factorial de 3 Vox as an chairn, agus factorial de 4 anois an fráma gníomhach. 112 00:05:09,410 --> 00:05:13,510 >> 4, a deir, OK, tá mé ag dul a thabhairt ar ais 4 huaire an factorial de 3, a bhí sé. 113 00:05:13,510 --> 00:05:15,980 Go raibh an luach a factorial de 3 ais. 114 00:05:15,980 --> 00:05:19,010 Agus is é sin 4 huaire 6 24. 115 00:05:19,010 --> 00:05:20,990 Agus tá mé ag dul chun pas a go ais go dtí factorial 116 00:05:20,990 --> 00:05:23,160 de 5, bhfuil curtha ag fanacht liom. 117 00:05:23,160 --> 00:05:25,270 Factorial de 5 anois an fráma gníomhach. 118 00:05:25,270 --> 00:05:30,700 Tá sé ag dul a thabhairt ar ais 5 uaire factorial de 4-- 5 uaire 24, nó 120-- 119 00:05:30,700 --> 00:05:32,722 agus a thabhairt go luach ar ais go to main, a bhfuil 120 00:05:32,722 --> 00:05:35,680 ag fanacht an-foighneach le haghaidh fada ag bun an chairn. 121 00:05:35,680 --> 00:05:36,640 >> Tá sé nuair a thosaigh sé. 122 00:05:36,640 --> 00:05:37,670 Rinne sé an nglao seo. 123 00:05:37,670 --> 00:05:39,400 Roinnt frámaí ghlac ag an mbarr. 124 00:05:39,400 --> 00:05:41,890 Tá sé anois ar ais ar bharr an chairn. 125 00:05:41,890 --> 00:05:43,450 Tá sé an fráma gníomhach. 126 00:05:43,450 --> 00:05:47,810 Mar sin, is mó a fuair an luach 120 ar ais ó factorial de 5. 127 00:05:47,810 --> 00:05:50,750 Baineann sé le bheith ag fanacht le phriontáil amach go luach. 128 00:05:50,750 --> 00:05:51,657 Agus ansin a dhéanfar é. 129 00:05:51,657 --> 00:05:53,240 Níl aon línte níos mó de cód i is mó. 130 00:05:53,240 --> 00:05:56,800 Mar sin Vox mó ar fráma amach an chairn, agus táimid ag déanamh. 131 00:05:56,800 --> 00:05:58,992 >> Agus sin conas a oibríonn athchúrsáil. 132 00:05:58,992 --> 00:06:00,200 Sin conas a oibríonn frámaí chairn. 133 00:06:00,200 --> 00:06:03,120 Glacfar na glaonna fheidhm a tharla roimhe 134 00:06:03,120 --> 00:06:06,620 bhfuil ach ar sos, ag fanacht do na glaonna dhiaidh 135 00:06:06,620 --> 00:06:12,050 a chríochnú ionas gur féidir leo a bheith ar an gníomhach fráma agus a chríochnú an méid is gá dóibh a dhéanamh. 136 00:06:12,050 --> 00:06:13,060 >> Tá mé Doug Lloyd. 137 00:06:13,060 --> 00:06:14,880 Is é seo an CS50. 138 00:06:14,880 --> 00:06:16,580