1 00:00:00,000 --> 00:00:07,800 2 00:00:07,800 --> 00:00:10,190 >> ZAMYLA: ordena ulertzeko In errekurtsibitate, hau behar duzu 3 00:00:10,190 --> 00:00:13,820 lehen ulertzen errekurtsibitate. 4 00:00:13,820 --> 00:00:17,280 Programaren diseinu bitartekoak in errekurtsibitate beharrik auto-erreferentziazko duzula 5 00:00:17,280 --> 00:00:18,570 definizioak. 6 00:00:18,570 --> 00:00:21,520 Recursive datuen egitura, adibidez, Datu egiturak direla 7 00:00:21,520 --> 00:00:23,990 beraiek artean, in euren definizioak. 8 00:00:23,990 --> 00:00:27,160 Baina gaur egun, ari gara bideratzen joan funtzio errekurtsiboa da. 9 00:00:27,160 --> 00:00:31,160 >> Gogoratzen funtzio hori hartu Sarrerek, argumentuak, eta balio gisa itzultzeko bere 10 00:00:31,160 --> 00:00:34,480 ordezkatzen duen irteera diagrama hau hemen. 11 00:00:34,480 --> 00:00:38,060 Egingo koadroan pentsatzen dugu gorputzean jo funtzioa, multzoa duten 12 00:00:38,060 --> 00:00:42,340 interpretatzen duen agindu sarrera eta irteera bat emateko. 13 00:00:42,340 --> 00:00:45,660 Gorputzaren barruan batean hurbildu nahi gaitu funtzioaren deiak agerian izan behar 14 00:00:45,660 --> 00:00:47,430 beste funtzio baita. 15 00:00:47,430 --> 00:00:51,300 Hartu funtzio sinple hau, lelo, duen kate bakar bat hartzen du sarrera gisa eta 16 00:00:51,300 --> 00:00:54,630 grabatuak zenbat letrak kate hori dauka. 17 00:00:54,630 --> 00:00:58,490 Funtzioa strlen, katea luzera, deritzo, zeinaren irteera da 18 00:00:58,490 --> 00:01:01,890 printf deia beharrezkoak. 19 00:01:01,890 --> 00:01:05,770 >> Orain, zer funtzio errekurtsiboa bat egiten du berezia da berez deitzen dela. 20 00:01:05,770 --> 00:01:09,610 Recursive honetan adieraz ditzakegu laranja gezi honen bidez deitu 21 00:01:09,610 --> 00:01:11,360 berak itzuli begizta. 22 00:01:11,360 --> 00:01:15,630 Baina bera berriro exekutatzea bakarrik izango dei errekurtsiboa beste egiteko, eta 23 00:01:15,630 --> 00:01:17,150 beste bat eta beste bat. 24 00:01:17,150 --> 00:01:19,100 Baina funtzio errekurtsiboa ezin daiteke infinitua. 25 00:01:19,100 --> 00:01:23,490 Nolabait amaituko dute, edo zure programa betiko ihes egingo. 26 00:01:23,490 --> 00:01:27,680 >> Beraz, hausteko modu bat aurkitu behar dugu ditu dei errekurtsiboak daudelarik. 27 00:01:27,680 --> 00:01:29,900 Hau deitzen dugun base kasuan. 28 00:01:29,900 --> 00:01:33,570 Oinarrizko kasua berriro baldin eta, funtzioa egin gabe itzultzen 29 00:01:33,570 --> 00:01:34,950 dei errekurtsiboa beste. 30 00:01:34,950 --> 00:01:39,610 Hartu funtzio hori, hi, void funtzioa int n hartzen du sarrera gisa. 31 00:01:39,610 --> 00:01:41,260 Base kasuan lehen dator. 32 00:01:41,260 --> 00:01:46,220 N zero baino txikiagoa, inprimatu bye eta bada itzultzeko Gainerako kasuetan baterako, 33 00:01:46,220 --> 00:01:49,400 funtzioa hi inprimatu egingo eta exekutatu dei errekurtsiboa. 34 00:01:49,400 --> 00:01:53,600 Funtzioa hi-dei batekin decremented sarrera balio bat. 35 00:01:53,600 --> 00:01:56,790 >> Orain, inprimatu dugu hi, nahiz eta, funtzioa ez da itxiko dugun arte 36 00:01:56,790 --> 00:02:00,370 itzultzeko bere itzulera mota, Kasu void honetan. 37 00:02:00,370 --> 00:02:04,830 Beraz, behin n base kasuan baino beste baterako, funtzioa hi honetan itzuliko da hi 38 00:02:04,830 --> 00:02:06,890 n ken 1. 39 00:02:06,890 --> 00:02:10,050 Geroztik funtzio hori hutsa da, nahiz eta, dugu ez esplizituki bueltan idatzi hemen. 40 00:02:10,050 --> 00:02:12,000 Besterik funtzioa exekutatu dugu. 41 00:02:12,000 --> 00:02:16,960 Beraz hi deituz (3) izango hi inprimatu eta exekutatu hi (2) hi exekutatzen (1) bat 42 00:02:16,960 --> 00:02:20,560 horrek hi exekutatzen (0), non base kasuan baldintza betetzen da. 43 00:02:20,560 --> 00:02:24,100 Beraz, hi (0) bistaratzen bye eta itzultzen. 44 00:02:24,100 --> 00:02:24,990 >> Ados. 45 00:02:24,990 --> 00:02:28,690 Beraz, gaur egun oinarriak ulertzen dugula funtzio errekurtsiboak, behar dutela 46 00:02:28,690 --> 00:02:32,730 base kasuan gutxienez bat baita bat dei errekurtsiboa, dezagun aurrera bati 47 00:02:32,730 --> 00:02:34,120 Esanguratsua adibidez. 48 00:02:34,120 --> 00:02:37,830 Ez da besterik gabe itzuliko dela bat gal ez Gaia zer. 49 00:02:37,830 --> 00:02:41,340 >> Dezagun faktoriala begirada bat Erabilitako operazio gehien batean 50 00:02:41,340 --> 00:02:43,660 probabilitate kalkuluak. 51 00:02:43,660 --> 00:02:48,120 N faktorial behin produktua da baino zenbaki oso positibo gutxiago 52 00:02:48,120 --> 00:02:49,400 eta n berdinak. 53 00:02:49,400 --> 00:02:56,731 Beraz, faktore bost 5 aldiz 4 aldiz da 3 aldiz 2 aldiz 1 120 emateko. 54 00:02:56,731 --> 00:03:01,400 Lau faktore 4 aldiz 3 aldiz da 2 aldiz 1 24 emateko. 55 00:03:01,400 --> 00:03:04,910 Eta arau bera aplikatzen edozein zenbaki oso izateko. 56 00:03:04,910 --> 00:03:08,670 >> Beraz, nola recursive idazten dugu agian faktoriala kalkulatzen duen funtzioa 57 00:03:08,670 --> 00:03:09,960 Zenbaki baten? 58 00:03:09,960 --> 00:03:14,700 Beno, identifikatu behar dugu bai base kasuan eta dei errekurtsiboa. 59 00:03:14,700 --> 00:03:18,250 Dei errekurtsiboa bera izango da Kasu guztietan oinarri izan ezik 60 00:03:18,250 --> 00:03:21,420 kasuan, horrek esan nahi izango dugula behar eredu bat emango digu aurkitu gure 61 00:03:21,420 --> 00:03:23,350 nahi den emaitza. 62 00:03:23,350 --> 00:03:30,270 >> Adibide honetan, ikus 5 nola faktore biderkatzailea 4 3 by 2 eta 1 dakar 63 00:03:30,270 --> 00:03:33,010 Eta biderketa oso bera aurkitu da hemen, 64 00:03:33,010 --> 00:03:35,430 4 faktore definizioa. 65 00:03:35,430 --> 00:03:39,810 Beraz, ikusten dugu 5 faktore hori da besterik 5 aldiz 4 faktore. 66 00:03:39,810 --> 00:03:43,360 Orain aplikatu du patroi hau 4 baita faktore? 67 00:03:43,360 --> 00:03:44,280 Bai. 68 00:03:44,280 --> 00:03:49,120 4 faktore hori du ikusiko dugu biderketa 3 aldiz 2 aldiz 1, the 69 00:03:49,120 --> 00:03:51,590 definizioa bera 3 faktore gisa. 70 00:03:51,590 --> 00:03:56,950 Beraz, 4 faktore 4 aldiz 3 berdina da faktorial, eta abar eta abar gure 71 00:03:56,950 --> 00:04:02,170 eredua 1 faktorial, arte makilak eta horrek definizioz 1 berdina da. 72 00:04:02,170 --> 00:04:04,950 >> Ez dago beste positiboak Osoko zenbaki utzi. 73 00:04:04,950 --> 00:04:07,870 Beraz, eredua behar dugu Gure dei errekurtsiboa. 74 00:04:07,870 --> 00:04:13,260 n faktorial n aldiz berdina da n faktoriala ken 1. 75 00:04:13,260 --> 00:04:14,370 Eta gure kasuan? 76 00:04:14,370 --> 00:04:17,370 Hori besterik ez izan gure definizioa 1 faktore. 77 00:04:17,370 --> 00:04:19,995 >> Beraz, orain mugitu idatziz ahal izango dugu funtzioaren kodea. 78 00:04:19,995 --> 00:04:24,110 Base kasuan, ikusiko dugu Baldintza n berdin berdin 1, non 79 00:04:24,110 --> 00:04:25,780 itzuliko dugu 1. 80 00:04:25,780 --> 00:04:29,280 Orduan dei errekurtsiboa gainean mugituz, n aldiz itzuli ikusiko dugu 81 00:04:29,280 --> 00:04:32,180 n faktorial ken 1. 82 00:04:32,180 --> 00:04:33,590 >> Orain dezagun probatzeko gure hau. 83 00:04:33,590 --> 00:04:35,900 Dezagun saiatu faktorial 4 utzi. 84 00:04:35,900 --> 00:04:39,420 Gure funtzioa per berdina da 4 aldiz faktorial (3). 85 00:04:39,420 --> 00:04:43,040 Faktorial (3) da berdina 3 aldiz faktorial (2). 86 00:04:43,040 --> 00:04:48,700 Faktorial (2) da 2 aldiz berdina faktorial (1), 1 ematen du. 87 00:04:48,700 --> 00:04:52,490 Faktorial (2) orain 2 aldiz 1, 2 itzultzen. 88 00:04:52,490 --> 00:04:55,960 Faktorial (3), gaur egun itzuli ahal 3 aldiz 2, 6. 89 00:04:55,960 --> 00:05:02,490 Eta azkenik, faktore (4) 4 aldiz 6, 24 itzultzen du. 90 00:05:02,490 --> 00:05:06,780 >> Duzu arazorik topatzea bazabiltza dei errekurtsiboa batera, asmoa duten 91 00:05:06,780 --> 00:05:09,660 funtzioa dagoeneko lan egiten du. 92 00:05:09,660 --> 00:05:13,450 Zer esan nahi dut, hau da, behar duzu duten dei errekurtsiboa fidatzen itzultzeko 93 00:05:13,450 --> 00:05:15,100 eskuineko balioak. 94 00:05:15,100 --> 00:05:18,960 Esate baterako, badakit bada Faktoriala (5) 5 aldiz berdinen 95 00:05:18,960 --> 00:05:24,870 Faktoriala (4), konfiantza noa Faktoriala (4) emango dit 24. 96 00:05:24,870 --> 00:05:28,510 Pentsatu aldagai gisa, zuk rentzat, dagoeneko definitu balitz bezala 97 00:05:28,510 --> 00:05:30,070 Faktoriala (4). 98 00:05:30,070 --> 00:05:33,850 Beraz edozein faktore egiteko (n), da n produktua eta 99 00:05:33,850 --> 00:05:35,360 aurreko faktore. 100 00:05:35,360 --> 00:05:38,130 Eta aurreko faktore hau deituz lortzen da 101 00:05:38,130 --> 00:05:41,330 n faktorial ken 1. 102 00:05:41,330 --> 00:05:45,130 >> Orain, ikusten duzu ezartzeko ahal izango bada bat recursive yourself funtzionatu. 103 00:05:45,130 --> 00:05:50,490 Kargatu zure terminal edo run.cs50.net, eta funtzioaren batura bat idatzi 104 00:05:50,490 --> 00:05:54,770 duen osoko zenbaki n bat hartu eta itzultzen du partiduko positibo guztien batura 105 00:05:54,770 --> 00:05:57,490 n 1etik osokoak. 106 00:05:57,490 --> 00:06:01,000 Nik idatzi dituzten zenbait batuketa balioak lagundu nahi baduzu, gure. 107 00:06:01,000 --> 00:06:04,030 Lehen, irudikatu du base kasuan baldintza. 108 00:06:04,030 --> 00:06:06,170 Gero, batura begiratu (5). 109 00:06:06,170 --> 00:06:09,270 Daiteke zuk adierazteko termino batuketa beste baten? 110 00:06:09,270 --> 00:06:11,290 Orain, zer batuketa buruz (4)? 111 00:06:11,290 --> 00:06:15,630 Nola daiteke batuketa adierazteko duzu (4) batuketa beste aldetik? 112 00:06:15,630 --> 00:06:19,655 >> Behin batuketa duzu (5) eta batura (4) beste zenbatekoak adierazten da, ikus 113 00:06:19,655 --> 00:06:22,970 duzu bat identifikatu ahal bada batura (n) eredua. 114 00:06:22,970 --> 00:06:26,190 Hala ez bada, saiatu bat beste zenbaki batzuk eta haien batuketa adierazteko 115 00:06:26,190 --> 00:06:28,410 beste zenbakiak dagokionez. 116 00:06:28,410 --> 00:06:31,930 Ereduak identifikatzen diskretuak arabera zenbakiak, Oraindik zure bidean 117 00:06:31,930 --> 00:06:34,320 Edozein n eredua identifikatuz. 118 00:06:34,320 --> 00:06:38,040 >> Errekurtsio tresna benetan boteretsua da, beraz, noski, ez da mugatzen 119 00:06:38,040 --> 00:06:39,820 funtzio matematiko. 120 00:06:39,820 --> 00:06:44,040 Errekurtsio oso modu eraginkorrean erabili ahal izango da denean adibidez zuhaitzak aurre. 121 00:06:44,040 --> 00:06:47,210 Begiratu zuhaitzak labur bat sakon berrikuspena gehiago, baina oraingoz 122 00:06:47,210 --> 00:06:51,140 gogoratzen duten bitar bilaketa zuhaitzak, in bereziki, osatuak daude, nodo, bakoitzaren 123 00:06:51,140 --> 00:06:53,820 balio du, eta bi nodo erakusleak. 124 00:06:53,820 --> 00:06:57,270 Normalean, hau da, ordezkatzen duen nodo nagusi line seinalatuz bat izatea 125 00:06:57,270 --> 00:07:01,870 ezkerreko ume nodo eta bat Umearen eskuineko nodo. 126 00:07:01,870 --> 00:07:04,510 Bilaketa bitarra baten egitura Zuhaitz erabaki bera ondo 127 00:07:04,510 --> 00:07:05,940 bilaketa errekurtsiboaren batera. 128 00:07:05,940 --> 00:07:09,730 Dei errekurtsiboa bai igarotzen ezker edo eskuineko nodoa, baina gehiago 129 00:07:09,730 --> 00:07:10,950 Zuhaitz labur hori. 130 00:07:10,950 --> 00:07:15,690 >> Esan eragiketa bat egiteko nahi dituzun Zuhaitz bitar batean nodo bakoitza. 131 00:07:15,690 --> 00:07:17,410 Nola liteke hori buruz joan beharko duzu? 132 00:07:17,410 --> 00:07:20,600 Beno, errekurtsiboa idatzi izan duzu operazioa burutzen duten funtzioa 133 00:07:20,600 --> 00:07:24,450 guraso nodo on eta errekurtsiboa bat egiten du funtzioa bera deitu, 134 00:07:24,450 --> 00:07:27,630 ezkerretik igaroz eta eskuineko ume nodoak. 135 00:07:27,630 --> 00:07:31,650 Adibidez, funtzio hau, lelo, duen nodo jakin batean balioa eta aldatzen 136 00:07:31,650 --> 00:07:33,830 bere 1 haur guztiek. 137 00:07:33,830 --> 00:07:37,400 Base bat nulua node arrazoiak kasuan , itzultzeko funtzioa adieraziz 138 00:07:37,400 --> 00:07:41,290 ez daudela edozein nodo duten azpi-zuhaitz utzi. 139 00:07:41,290 --> 00:07:42,620 >> Dezagun ibiltzeko. 140 00:07:42,620 --> 00:07:44,340 Lehenengo gurasoa 13 da. 141 00:07:44,340 --> 00:07:47,930 Balioa aldatuko dugu 1, eta gero deitu gure ezker aldean funtzioa baita 142 00:07:47,930 --> 00:07:49,600 eskuinetik bezala. 143 00:07:49,600 --> 00:07:53,910 Funtzioa, foo, da ezker aldean deitzen azpi-zuhaitza lehen, beraz, ezker nodo 144 00:07:53,910 --> 00:07:57,730 be 1 eta foo reassigned egingo borondatea egon nodo duten haur batek deitu, 145 00:07:57,730 --> 00:08:01,900 lehen ezkerreko eta ondoren, eskuinera, eta abar eta abar. 146 00:08:01,900 --> 00:08:05,630 Eta kontatu adarrak ez dute haurrak edozein gehiago, prozesu bera 147 00:08:05,630 --> 00:08:09,700 egingo eskuineko haurrentzat jarraitu zuhaitz osoaren nodoen arte 148 00:08:09,700 --> 00:08:11,430 1 reassigned. 149 00:08:11,430 --> 00:08:15,390 >> Ikusten duzun bezala, ez dira mugatzen dei bakar bat errekurtsiboa. 150 00:08:15,390 --> 00:08:17,930 Bezala asko lana egin egingo gisa. 151 00:08:17,930 --> 00:08:21,200 Zuhaitz bat izan zuen zer baduzu non bakoitzak nodo hiru seme-alaba izan, 152 00:08:21,200 --> 00:08:23,100 Ezkerreko, erdiko eta eskuineko? 153 00:08:23,100 --> 00:08:24,886 Nola litzateke foo editatu duzu? 154 00:08:24,886 --> 00:08:25,860 Beno, erraza da. 155 00:08:25,860 --> 00:08:30,250 Just dei errekurtsiboa bat gehitzeko eta erdiko nodo erakuslea pasatzen. 156 00:08:30,250 --> 00:08:34,549 >> Errekurtsio da oso indartsua eta ez aipatu dotorea, baina bat izan daiteke 157 00:08:34,549 --> 00:08:38,010 hasiera batean kontzeptu zaila da, beraz, gaixoari eta zure denbora hartu. 158 00:08:38,010 --> 00:08:39,370 Base kasuan hasteko. 159 00:08:39,370 --> 00:08:42,650 Ohi da errazena identifikatu da, eta, ondoren, lan egin dezakezu 160 00:08:42,650 --> 00:08:43,830 atzeraka bertatik. 161 00:08:43,830 --> 00:08:46,190 Badakizu iristeko behar duzu zure base kasuan, beraz, agian duela 162 00:08:46,190 --> 00:08:47,760 aholku batzuk emango dizu. 163 00:08:47,760 --> 00:08:53,120 Saiatu kasu zehatz bat adierazteko hasi Beste kasu dagokionez, edo azpi-multzo. 164 00:08:53,120 --> 00:08:54,700 >> Labur hau behaketa Eskerrik asko. 165 00:08:54,700 --> 00:08:58,920 Oso gutxienez, orain, ahal duzun honen antzeko txisteak ulertzen. 166 00:08:58,920 --> 00:09:01,250 Nire izena Zamyla da, eta hau da cs50. 167 00:09:01,250 --> 00:09:04,306 168 00:09:04,306 --> 00:09:07,170 >> Hartu funtzio hori, hi, bat eramango void funtzioa 169 00:09:07,170 --> 00:09:09,212 int, n, sarrera bezala. 170 00:09:09,212 --> 00:09:11,020 Base kasuan lehen dator. 171 00:09:11,020 --> 00:09:14,240 N 0 baino gutxiago, inprimatu bada "Bye" eta itzulera. 172 00:09:14,240 --> 00:09:15,490