1 00:00:00,000 --> 00:00:07,800 2 00:00:07,800 --> 00:00:10,190 >> ZAMYLA: Ili kuelewa kujirudia, lazima 3 00:00:10,190 --> 00:00:13,820 kwanza kuelewa recursion. 4 00:00:13,820 --> 00:00:17,280 Kuwa na kujirudia katika kubuni programu njia kwamba una binafsi-rejea 5 00:00:17,280 --> 00:00:18,570 ufafanuzi. 6 00:00:18,570 --> 00:00:21,520 Kujirudia miundo data, kwa mfano, ni miundo data kwamba 7 00:00:21,520 --> 00:00:23,990 pamoja na wao wenyewe katika ufafanuzi yao. 8 00:00:23,990 --> 00:00:27,160 Lakini leo, sisi ni kwenda kuzingatia juu ya kazi ya kujirudia. 9 00:00:27,160 --> 00:00:31,160 >> Kumbuka kwamba kazi kuchukua pembejeo, hoja, na kurudi thamani kama zao 10 00:00:31,160 --> 00:00:34,480 pato kuwakilishwa na mchoro huu hapa. 11 00:00:34,480 --> 00:00:38,060 Tutaweza kufikiria sanduku kama mwili wa kazi, zenye seti ya 12 00:00:38,060 --> 00:00:42,340 maelekezo ya kwamba kutafsiri pembejeo na kutoa pato. 13 00:00:42,340 --> 00:00:45,660 Kuchukua kuangalia kwa karibu ndani ya mwili wa kazi inaweza kufunua wito kwa 14 00:00:45,660 --> 00:00:47,430 majukumu mengine kama vizuri. 15 00:00:47,430 --> 00:00:51,300 Kuchukua kazi hii rahisi, foo, kwamba inachukua kamba moja kama mchango na 16 00:00:51,300 --> 00:00:54,630 prints wangapi barua kamba ambayo ina. 17 00:00:54,630 --> 00:00:58,490 kazi strlen, kwa kamba urefu, inaitwa, ambaye pato ni 18 00:00:58,490 --> 00:01:01,890 inahitajika kwa ajili ya wito wa printf. 19 00:01:01,890 --> 00:01:05,770 >> Sasa, nini hufanya kazi ya kujirudia maalum ni kwamba wito yenyewe. 20 00:01:05,770 --> 00:01:09,610 Tunaweza kuwakilisha kujirudia hii wito kwa hii machungwa arrow 21 00:01:09,610 --> 00:01:11,360 wanaoendesha nyuma yenyewe. 22 00:01:11,360 --> 00:01:15,630 Lakini utekelezaji yenyewe tena mapenzi tu kufanya wito mwingine kujirudia, na 23 00:01:15,630 --> 00:01:17,150 mwingine na mwingine. 24 00:01:17,150 --> 00:01:19,100 Lakini kazi ya kujirudia hawezi kuwa kubwa. 25 00:01:19,100 --> 00:01:23,490 Wanapaswa mwisho kwa kiasi fulani, au yako mpango wa kukimbia milele. 26 00:01:23,490 --> 00:01:27,680 >> Kwa hiyo, tunahitaji kutafuta njia ya kuvunja nje ya simu ya kujirudia. 27 00:01:27,680 --> 00:01:29,900 Sisi wito huu kesi ya msingi. 28 00:01:29,900 --> 00:01:33,570 Wakati hali kesi ya msingi ni alikutana, kazi anarudi bila kufanya 29 00:01:33,570 --> 00:01:34,950 mwingine wito kujirudia. 30 00:01:34,950 --> 00:01:39,610 Kuchukua kazi hii, hi, utupu kazi kwamba inachukua int n kama pembejeo. 31 00:01:39,610 --> 00:01:41,260 kesi ya msingi anakuja kwanza. 32 00:01:41,260 --> 00:01:46,220 Kama n ni chini ya sifuri, magazeti bye na kurudi kwa ajili ya kesi nyingine zote, 33 00:01:46,220 --> 00:01:49,400 kazi magazeti hi na kutekeleza wito kujirudia. 34 00:01:49,400 --> 00:01:53,600 Mwingine wito kwa kazi hi na decremented pembejeo thamani. 35 00:01:53,600 --> 00:01:56,790 >> Sasa, hata kama sisi magazeti hi, kazi si kusitisha mpaka sisi 36 00:01:56,790 --> 00:02:00,370 kurudi kurudi aina yake, katika hii utupu kesi. 37 00:02:00,370 --> 00:02:04,830 Hivyo kwa kila n kingine chochote zaidi ya kesi ya msingi, hii hi kazi atarudi hi 38 00:02:04,830 --> 00:02:06,890 ya n minus 1. 39 00:02:06,890 --> 00:02:10,050 Tangu kazi hii ni batili ingawa, sisi si wazi aina ya kurudi hapa. 40 00:02:10,050 --> 00:02:12,000 Tutaweza tu kutekeleza kazi. 41 00:02:12,000 --> 00:02:16,960 Hivyo wito hi (3) magazeti hi na kutekeleza hi (2) ambayo inatimiza hi (1) moja 42 00:02:16,960 --> 00:02:20,560 ambayo inatimiza hi (0), ambapo hali kesi ya msingi ni alikutana. 43 00:02:20,560 --> 00:02:24,100 Hivyo hi (0) Prints bye na kurudi. 44 00:02:24,100 --> 00:02:24,990 >> OK. 45 00:02:24,990 --> 00:02:28,690 Hivyo sasa kwamba sisi kuelewa misingi ya kazi ya kujirudia, kwamba wanahitaji 46 00:02:28,690 --> 00:02:32,730 kesi angalau moja ya msingi ikiwa ni pamoja na wito kujirudia, basi hoja juu ya 47 00:02:32,730 --> 00:02:34,120 maana zaidi mfano. 48 00:02:34,120 --> 00:02:37,830 Moja ambayo haina kurudi tu utupu bila kujali. 49 00:02:37,830 --> 00:02:41,340 >> Hebu tuangalie factorial operesheni kutumika kawaida katika 50 00:02:41,340 --> 00:02:43,660 uwezekano mahesabu. 51 00:02:43,660 --> 00:02:48,120 Factorial ya n ni bidhaa ya kila integer chanya chini ya 52 00:02:48,120 --> 00:02:49,400 na sawa na n. 53 00:02:49,400 --> 00:02:56,731 Hivyo factorial tano ni mara 5 mara 4 Mara 3 2 mara 1 kwa kutoa 120. 54 00:02:56,731 --> 00:03:01,400 Nne factorial ni mara 4 mara 3 2 mara 1 kwa kutoa 24. 55 00:03:01,400 --> 00:03:04,910 Na utawala hiyo inatumika kwa integer yoyote mazuri. 56 00:03:04,910 --> 00:03:08,670 >> Hivyo jinsi gani sisi kuandika kujirudia kazi kwamba mahesabu ya factorial 57 00:03:08,670 --> 00:03:09,960 ya namba? 58 00:03:09,960 --> 00:03:14,700 Naam, tutaweza haja ya kutambua wote kesi ya msingi na wito kujirudia. 59 00:03:14,700 --> 00:03:18,250 wito kujirudia itakuwa sawa ajili ya matukio yote ila kwa msingi 60 00:03:18,250 --> 00:03:21,420 kesi, ambayo ina maana kwamba sisi itabidi kupata mfano kwamba atatupa wetu 61 00:03:21,420 --> 00:03:23,350 taka matokeo. 62 00:03:23,350 --> 00:03:30,270 >> Kwa mfano huu, kuona jinsi 5 factorial inahusisha kuzidisha 4 na 3 na 2 na 1 63 00:03:30,270 --> 00:03:33,010 Na kwamba kuzidisha sawa sana ni kupatikana hapa, 64 00:03:33,010 --> 00:03:35,430 ufafanuzi wa 4 factorial. 65 00:03:35,430 --> 00:03:39,810 Hivyo tunaona kwamba 5 factorial ni tu mara 5 4 factorial. 66 00:03:39,810 --> 00:03:43,360 Sasa haina muundo huu kuomba 4 Factorial vile vile? 67 00:03:43,360 --> 00:03:44,280 Ndiyo. 68 00:03:44,280 --> 00:03:49,120 Tunaona kwamba 4 factorial ina kuzidisha mara 3 2 mara 1, 69 00:03:49,120 --> 00:03:51,590 ufafanuzi huo sana kama 3 factorial. 70 00:03:51,590 --> 00:03:56,950 Hivyo 4 factorial ni sawa na 4 mara 3 factorial, na kadhalika na kadhalika wetu 71 00:03:56,950 --> 00:04:02,170 mfano vijiti mpaka 1 factorial, ambayo kwa ufafanuzi ni sawa na 1. 72 00:04:02,170 --> 00:04:04,950 >> Hakuna mengine chanya integers wa kushoto. 73 00:04:04,950 --> 00:04:07,870 Hivyo tuna mfano kwa wito wetu kujirudia. 74 00:04:07,870 --> 00:04:13,260 n factorial ni sawa na mara n factorial ya n minus 1. 75 00:04:13,260 --> 00:04:14,370 Na kesi yetu ya msingi? 76 00:04:14,370 --> 00:04:17,370 Kwamba itabidi kuwa na tafsiri yetu ya 1 factorial. 77 00:04:17,370 --> 00:04:19,995 >> Hivyo sasa tunaweza kuendelea na kuandika kanuni kwa ajili ya kazi. 78 00:04:19,995 --> 00:04:24,110 Kwa kesi ya msingi, tutaweza kuwa hali n sawa na usawa 1, ambapo 79 00:04:24,110 --> 00:04:25,780 tutaweza kurudi 1. 80 00:04:25,780 --> 00:04:29,280 Kisha kuhamia kwenye wito kujirudia, sisi itabidi kurudi mara n 81 00:04:29,280 --> 00:04:32,180 factorial ya n minus 1. 82 00:04:32,180 --> 00:04:33,590 >> Sasa hebu mtihani yetu hii. 83 00:04:33,590 --> 00:04:35,900 Hebu jaribu factorial 4. 84 00:04:35,900 --> 00:04:39,420 Kwa kazi yetu ni sawa kwa mara 4 factorial (3). 85 00:04:39,420 --> 00:04:43,040 Factorial (3) ni sawa na Mara 3 factorial (2). 86 00:04:43,040 --> 00:04:48,700 Factorial (2) ni sawa na mara 2 factorial (1), ambayo anarudi 1. 87 00:04:48,700 --> 00:04:52,490 Factorial (2) sasa anarudi 2 mara 1, 2. 88 00:04:52,490 --> 00:04:55,960 Factorial (3) sasa wanaweza kurudi Mara 3 2, 6. 89 00:04:55,960 --> 00:05:02,490 Na hatimaye, factorial (4) anarudi 4 mara 6, 24. 90 00:05:02,490 --> 00:05:06,780 >> Kama wewe ni kukutana na shida pamoja na simu ya kujirudia, kujifanya kuwa 91 00:05:06,780 --> 00:05:09,660 kazi kazi tayari. 92 00:05:09,660 --> 00:05:13,450 Nini maana na hii ni kwamba ni lazima imani wito wako kujirudia kurudi 93 00:05:13,450 --> 00:05:15,100 maadili ya haki. 94 00:05:15,100 --> 00:05:18,960 Kwa mfano, kama mimi kujua kwamba factorial (5) sawa na mara 5 95 00:05:18,960 --> 00:05:24,870 factorial (4), mimi nina kwenda kuamini kwamba factorial (4) atanipa 24. 96 00:05:24,870 --> 00:05:28,510 Fikiria kama variable, kama wewe mapenzi, kama ikiwa tayari inavyoelezwa 97 00:05:28,510 --> 00:05:30,070 factorial (4). 98 00:05:30,070 --> 00:05:33,850 Hivyo kwa factorial yoyote (n), ni bidhaa ya n na 99 00:05:33,850 --> 00:05:35,360 factorial uliopita. 100 00:05:35,360 --> 00:05:38,130 Na factorial hii ya awali ni kupatikana kwa kupiga 101 00:05:38,130 --> 00:05:41,330 factorial ya n minus 1. 102 00:05:41,330 --> 00:05:45,130 >> Sasa, kuona kama unaweza kutekeleza kujirudia kazi mwenyewe. 103 00:05:45,130 --> 00:05:50,490 Ujazo wa juu terminal yako, au run.cs50.net, na kuandika kazi Jumla 104 00:05:50,490 --> 00:05:54,770 kwamba inachukua integer n na anarudi Jumla ya yote mfululizo chanya 105 00:05:54,770 --> 00:05:57,490 integers kutoka n 1. 106 00:05:57,490 --> 00:06:01,000 Nimeandika nje kiasi ya baadhi ya maadili kukusaidia yetu. 107 00:06:01,000 --> 00:06:04,030 Kwanza, kufikiri kesi ya msingi hali hiyo. 108 00:06:04,030 --> 00:06:06,170 Basi, kuangalia Jumla (5). 109 00:06:06,170 --> 00:06:09,270 Je, unaweza kueleza kuwa katika suala Jumla ya mwingine? 110 00:06:09,270 --> 00:06:11,290 Sasa, nini kuhusu Jumla (4)? 111 00:06:11,290 --> 00:06:15,630 Jinsi gani unaweza kueleza Jumla (4) katika suala la Jumla mwingine? 112 00:06:15,630 --> 00:06:19,655 >> Mara baada ya kuwa na kiasi (5) na jumla (4) walionyesha katika suala la kiasi mengine, tazama 113 00:06:19,655 --> 00:06:22,970 kama unaweza kutambua mfano kwa Jumla (n). 114 00:06:22,970 --> 00:06:26,190 Kama siyo, kujaribu chache idadi nyingine na kueleza kiasi yao katika 115 00:06:26,190 --> 00:06:28,410 suala la idadi mwingine. 116 00:06:28,410 --> 00:06:31,930 Kwa kutambua chati kwa discrete idadi, wewe ni vizuri njia yako ya 117 00:06:31,930 --> 00:06:34,320 kutambua mfano kwa n yoyote. 118 00:06:34,320 --> 00:06:38,040 >> Recursion kweli zana yenye nguvu, hivyo bila shaka ni si mdogo 119 00:06:38,040 --> 00:06:39,820 kazi hisabati. 120 00:06:39,820 --> 00:06:44,040 Recursion inaweza kutumika kwa ufanisi sana wakati wa kushughulika na miti kwa mfano. 121 00:06:44,040 --> 00:06:47,210 Angalia short juu ya miti kwa ajili ya mapitio ya kina zaidi, lakini kwa sasa 122 00:06:47,210 --> 00:06:51,140 kukumbuka kwamba binary miti search, katika hasa, ni kufanywa juu ya nodes, kila 123 00:06:51,140 --> 00:06:53,820 na thamani na kuyatumia node mbili. 124 00:06:53,820 --> 00:06:57,270 Kwa kawaida, hii ni kuwakilishwa na mzazi node kuwa moja line akizungumzia 125 00:06:57,270 --> 00:07:01,870 upande wa kushoto mtoto node na moja kwa haki ya mtoto nodi. 126 00:07:01,870 --> 00:07:04,510 muundo wa search binary mti imejikita vizuri 127 00:07:04,510 --> 00:07:05,940 ya kutafuta kujirudia. 128 00:07:05,940 --> 00:07:09,730 wito kujirudia ama hupita katika upande wa kushoto au node haki, lakini zaidi 129 00:07:09,730 --> 00:07:10,950 ya kwamba katika mti mfupi. 130 00:07:10,950 --> 00:07:15,690 >> Sema unataka kufanya operesheni juu ya kila nodi moja katika mti binary. 131 00:07:15,690 --> 00:07:17,410 Jinsi gani kwenda kuhusu hilo? 132 00:07:17,410 --> 00:07:20,600 Naam, unaweza kuandika kujirudia kazi ambayo hufanya kazi 133 00:07:20,600 --> 00:07:24,450 juu ya mzazi node na hufanya kujirudia kuwaita kazi moja, 134 00:07:24,450 --> 00:07:27,630 kupita katika upande wa kushoto na haki ya mtoto nodes. 135 00:07:27,630 --> 00:07:31,650 Kwa mfano, kazi hii, foo, kwamba mabadiliko thamani ya node aliyopewa na 136 00:07:31,650 --> 00:07:33,830 yote ya watoto wake kwa 1. 137 00:07:33,830 --> 00:07:37,400 kesi ya msingi ya sababu null node kazi kurudi, kuonyesha 138 00:07:37,400 --> 00:07:41,290 kwamba kuna nodes yoyote kushoto kwa kuwa ndogo ya mti. 139 00:07:41,290 --> 00:07:42,620 >> Hebu kutembea kwa njia hiyo. 140 00:07:42,620 --> 00:07:44,340 mzazi kwanza ni 13. 141 00:07:44,340 --> 00:07:47,930 Sisi mabadiliko ya thamani ya 1, na kisha kuwaita kazi yetu upande wa kushoto kama vizuri 142 00:07:47,930 --> 00:07:49,600 kama ni haki. 143 00:07:49,600 --> 00:07:53,910 kazi, foo, ni wito wa kushoto ndogo ya mti wa kwanza, hivyo node kushoto 144 00:07:53,910 --> 00:07:57,730 itakuwa reassigned 1 na foo mapenzi kuitwa juu ya watoto node ya, 145 00:07:57,730 --> 00:08:01,900 kwanza kushoto na kisha haki, na kadhalika na kadhalika. 146 00:08:01,900 --> 00:08:05,630 Na kuwaambia kwamba matawi hawana watoto zaidi ili mchakato huo 147 00:08:05,630 --> 00:08:09,700 itaendelea kwa watoto haki mpaka nodes mti mzima ni 148 00:08:09,700 --> 00:08:11,430 reassigned 1. 149 00:08:11,430 --> 00:08:15,390 >> Kama unaweza kuona, wewe si mdogo wito wa kujirudia moja tu. 150 00:08:15,390 --> 00:08:17,930 Tu kama wengi kama kupata kazi kufanyika. 151 00:08:17,930 --> 00:08:21,200 Nini kama alikuwa na mti ambapo kila node na watoto watatu, 152 00:08:21,200 --> 00:08:23,100 Kushoto, katikati, na haki? 153 00:08:23,100 --> 00:08:24,886 Jinsi gani unaweza hariri foo? 154 00:08:24,886 --> 00:08:25,860 Naam, rahisi. 155 00:08:25,860 --> 00:08:30,250 Tu kuongeza mwingine wito kujirudia na kupita katika pointer node katikati. 156 00:08:30,250 --> 00:08:34,549 >> Recursion ni wenye nguvu sana na si kwa kutaja kifahari, lakini inaweza kuwa 157 00:08:34,549 --> 00:08:38,010 vigumu dhana kwa mara ya kwanza, hivyo kuwa na mvumilivu na kuchukua muda wako. 158 00:08:38,010 --> 00:08:39,370 Kuanza na kesi ya msingi. 159 00:08:39,370 --> 00:08:42,650 Ni kawaida rahisi kutambua, na kisha unaweza kufanya kazi 160 00:08:42,650 --> 00:08:43,830 nyuma kutoka huko. 161 00:08:43,830 --> 00:08:46,190 Unajua unahitaji kufikia yako msingi kesi, hivyo nguvu kwamba 162 00:08:46,190 --> 00:08:47,760 kukupa mwanga chache. 163 00:08:47,760 --> 00:08:53,120 Jaribu kueleza kesi moja maalum katika suala la kesi nyingine, au katika ndogo ya seti. 164 00:08:53,120 --> 00:08:54,700 >> Shukrani kwa ajili ya kuangalia hii fupi. 165 00:08:54,700 --> 00:08:58,920 Kwa uchache sana, sasa unaweza kuelewa utani kama hii. 166 00:08:58,920 --> 00:09:01,250 Jina langu ni Zamyla, na hii ni cs50. 167 00:09:01,250 --> 00:09:04,306 168 00:09:04,306 --> 00:09:07,170 >> Kuchukua kazi hii, hi, a utupu kazi ambayo inachukua 169 00:09:07,170 --> 00:09:09,212 int, n, kama pembejeo. 170 00:09:09,212 --> 00:09:11,020 kesi ya msingi anakuja kwanza. 171 00:09:11,020 --> 00:09:14,240 Kama n ni, magazeti chini ya 0 "Bye" na kurudi. 172 00:09:14,240 --> 00:09:15,490