1 00:00:00,000 --> 00:00:05,860 >> [CHWARAE CERDDORIAETH] 2 00:00:05,860 --> 00:00:09,530 >> DOUG LLOYD: Mae'n debyg y byddwch yn meddwl bod cod yn unig ei ddefnyddio i gyflawni tasg. 3 00:00:09,530 --> 00:00:10,450 Byddwch yn ysgrifennu 'ii maes. 4 00:00:10,450 --> 00:00:11,664 Mae'n gwneud rhywbeth. 5 00:00:11,664 --> 00:00:12,580 Dyna 'n bert lawer iddo. 6 00:00:12,580 --> 00:00:13,160 >> Rydych yn llunio ei. 7 00:00:13,160 --> 00:00:13,993 Rydych yn rhedeg y rhaglen. 8 00:00:13,993 --> 00:00:15,370 Rydych yn dda i fynd. 9 00:00:15,370 --> 00:00:17,520 >> Ond credwch neu beidio, os rydych cod am amser hir, 10 00:00:17,520 --> 00:00:20,550 chi mewn gwirionedd efallai yn dod i weld cod fel rhywbeth sy'n hardd. 11 00:00:20,550 --> 00:00:23,275 Y mae'n eu datrys problem mewn yn ffordd ddiddorol iawn, 12 00:00:23,275 --> 00:00:26,510 neu os oes dim ond rhywbeth gwirioneddol daclus am y ffordd y mae'n edrych. 13 00:00:26,510 --> 00:00:28,750 Efallai eich bod yn chwerthin arna i, ond mae'n wir. 14 00:00:28,750 --> 00:00:31,530 Ac recursion yn un ffordd i fath o gael syniad hwn 15 00:00:31,530 --> 00:00:34,090 o hardd cod, cain sy'n edrych. 16 00:00:34,090 --> 00:00:37,740 Y mae'n eu datrys problemau mewn ffyrdd sy'n yn ddiddorol, yn hawdd i ddychmygu, 17 00:00:37,740 --> 00:00:39,810 ac yn rhyfeddol byr. 18 00:00:39,810 --> 00:00:43,190 >> Mae'r gwaith ffordd recursion yw, yn swyddogaeth ailadroddus 19 00:00:43,190 --> 00:00:49,291 ei ddiffinio fel swyddogaeth sy'n galw ei hun fel rhan o'i weithredu. 20 00:00:49,291 --> 00:00:51,790 Gall hyn ymddangos ychydig yn od, a byddwn yn gweld ychydig 21 00:00:51,790 --> 00:00:53,750 am sut mae hyn yn gweithio mewn munud. 22 00:00:53,750 --> 00:00:55,560 Ond unwaith eto, mae'r rhain yn gweithdrefnau recursive yn 23 00:00:55,560 --> 00:00:57,730 mynd i fod mor gain oherwydd eu bod yn mynd 24 00:00:57,730 --> 00:01:00,410 i ddatrys y broblem heb gael yr holl swyddogaethau eraill hyn 25 00:01:00,410 --> 00:01:02,710 neu dolenni hir hyn. 26 00:01:02,710 --> 00:01:06,310 Byddwch yn gweld bod y rhain recursive gweithdrefnau yn mynd i edrych mor fyr. 27 00:01:06,310 --> 00:01:10,610 Ac maent yn wir yn mynd i wneud eich cod edrych yn llawer yn fwy prydferth. 28 00:01:10,610 --> 00:01:12,560 >> 'N annhymerus' roi enghraifft i chi o hyn i weld sut 29 00:01:12,560 --> 00:01:14,880 Gallai trefn ailadroddus gael eu diffinio. 30 00:01:14,880 --> 00:01:18,202 Felly os ydych yn gyfarwydd â hyn o ddosbarth mathemateg flynyddoedd lawer yn ôl, 31 00:01:18,202 --> 00:01:20,910 mae rhywbeth yn cael ei alw y swyddogaeth ffactoraidd, sydd fel arfer yn 32 00:01:20,910 --> 00:01:25,340 ddynodwyd fel pwynt ebychnod, a oedd yn Diffinnir dros pob cyfanrif positif. 33 00:01:25,340 --> 00:01:28,850 A'r ffordd y mae n ffactoraidd yn cael ei gyfrifo 34 00:01:28,850 --> 00:01:31,050 yn eich lluosi pob un mae'r niferoedd yn llai na 35 00:01:31,050 --> 00:01:33,750 neu'n hafal i together-- n yr holl rif cyfan llai na 36 00:01:33,750 --> 00:01:34,880 neu'n hafal i n gilydd. 37 00:01:34,880 --> 00:01:39,850 >> Felly 5 ffactoraidd yn 5 gwaith 4 gwaith 3 gwaith 2 waith 1. 38 00:01:39,850 --> 00:01:43,020 A 4 ffactoraidd yw 4 gwaith 3 gwaith 2 waith 1 ac yn y blaen. 39 00:01:43,020 --> 00:01:44,800 Byddwch yn cael y syniad. 40 00:01:44,800 --> 00:01:47,060 >> Fel rhaglenwyr, nid ydym yn ei wneud defnyddiwch n, pwynt ebychnod. 41 00:01:47,060 --> 00:01:51,840 Felly, byddwn yn diffinio'r ffactoraidd swyddogaeth fel ffaith o n. 42 00:01:51,840 --> 00:01:56,897 A byddwn yn defnyddio ffactoraidd i greu ateb recursive i broblem. 43 00:01:56,897 --> 00:01:59,230 Ac yr wyf yn meddwl y gallech ddod o hyd ei fod yn llawer mwy ar eu golwg 44 00:01:59,230 --> 00:02:02,380 apelio na'r ailadroddol Fersiwn o hyn, a oedd yn 45 00:02:02,380 --> 00:02:05,010 byddwn hefyd yn edrych ar mewn munud. 46 00:02:05,010 --> 00:02:08,310 >> Felly dyma gwpl o pun facts-- intended-- 47 00:02:08,310 --> 00:02:10,169 am factorial-- y swyddogaeth ffactoraidd. 48 00:02:10,169 --> 00:02:13,090 Mae ffactorial o 1, fel y dywedais, yw 1. 49 00:02:13,090 --> 00:02:15,690 Mae ffactor o 2 yw 2 gwaith 1. 50 00:02:15,690 --> 00:02:18,470 Mae ffactor o 3 yw 3 Amseroedd 2 waith 1, ac yn y blaen. 51 00:02:18,470 --> 00:02:20,810 Rydym yn siarad am 4 a 5 yn barod. 52 00:02:20,810 --> 00:02:23,940 >> Ond o edrych ar hyn, nid yw hyn yn wir? 53 00:02:23,940 --> 00:02:28,220 Onid yw ffactorial o 2 yn unig 2 waith ffactorial 1? 54 00:02:28,220 --> 00:02:31,130 Yr wyf yn golygu, ffactorial 1 yw 1. 55 00:02:31,130 --> 00:02:34,940 Felly ni all pam yr ydym yn unig yn dweud bod, ers ffactoraidd o 2 yw 2 waith 1, 56 00:02:34,940 --> 00:02:38,520 'i' 'n sylweddol dim ond 2 waith ffactorial 1? 57 00:02:38,520 --> 00:02:40,900 >> Ac yna ymestyn y syniad hwnnw, Nid yw ffactoraidd o 3 58 00:02:40,900 --> 00:02:44,080 dim ond 3 gwaith ffactorial 2? 59 00:02:44,080 --> 00:02:50,350 Ac ffactorial 4 yw 4 gwaith ffactorial 3, ac yn y blaen? 60 00:02:50,350 --> 00:02:52,530 Yn wir, mae'r ffactoraidd o unrhyw rif y gall dim ond 61 00:02:52,530 --> 00:02:54,660 gael eu mynegi os ydym yn garedig o gwneud hyn am byth. 62 00:02:54,660 --> 00:02:56,870 Gallwn fath o gyffredinoli y broblem ffactoraidd 63 00:02:56,870 --> 00:02:59,910 gan ei fod yn amseroedd n y ffactorial n minws 1. 64 00:02:59,910 --> 00:03:04,840 Mae'n n gwaith yn gynnyrch yr holl rifau llai na fi. 65 00:03:04,840 --> 00:03:08,890 >> Mae'r syniad hwn, mae hyn yn cyffredinoli o'r broblem, 66 00:03:08,890 --> 00:03:13,410 yn ein galluogi i recursively diffinio'r swyddogaeth ffactoraidd. 67 00:03:13,410 --> 00:03:15,440 Pan fyddwch yn diffinio swyddogaeth recursively, mae 68 00:03:15,440 --> 00:03:17,470 ddau beth y mae angen i fod yn rhan ohono. 69 00:03:17,470 --> 00:03:20,990 Mae angen i chi gael rhywbeth a elwir yn achos sylfaenol, sydd, pan fyddwch yn sbarduno hynny, 70 00:03:20,990 --> 00:03:22,480 Bydd atal y broses ailadroddus. 71 00:03:22,480 --> 00:03:25,300 >> Fel arall, mae swyddogaeth sy'n galw itself-- fel y byddech yn imagine-- 72 00:03:25,300 --> 00:03:26,870 allai fynd ymlaen am byth. 73 00:03:26,870 --> 00:03:29,047 Swyddogaeth yn galw y swyddogaeth galwadau y galwadau swyddogaeth 74 00:03:29,047 --> 00:03:30,380 y swyddogaeth yn galw y swyddogaeth. 75 00:03:30,380 --> 00:03:32,380 Os nad oes gennych ffordd i'w atal, eich rhaglen 76 00:03:32,380 --> 00:03:34,760 Bydd yn cael ei sownd yn effeithiol mewn dolen ddiddiwedd. 77 00:03:34,760 --> 00:03:37,176 Bydd yn damwain yn y pen draw, oherwydd bydd yn rhedeg allan o gof. 78 00:03:37,176 --> 00:03:38,990 Ond dyna ymyl y pwynt. 79 00:03:38,990 --> 00:03:42,210 >> Mae angen i ni gael rhyw ffordd arall i roi'r gorau pethau heblaw ein chwilfriwio rhaglen, 80 00:03:42,210 --> 00:03:46,010 oherwydd bod rhaglen sy'n damweiniau yn Mae'n debyg na hardd neu cain. 81 00:03:46,010 --> 00:03:47,690 Ac felly rydym yn galw hyn yr achos sylfaenol. 82 00:03:47,690 --> 00:03:50,610 Mae hwn yn ateb syml i broblem sy'n atal 83 00:03:50,610 --> 00:03:52,770 y broses ailadroddus rhag digwydd. 84 00:03:52,770 --> 00:03:55,220 Felly dyna un rhan o swyddogaeth ailadroddus. 85 00:03:55,220 --> 00:03:56,820 >> Mae'r ail ran yn wir ailadroddus. 86 00:03:56,820 --> 00:03:59,195 A dyma lle mae'r recursion Bydd yn digwydd. 87 00:03:59,195 --> 00:04:02,200 Dyma lle mae'r Bydd swyddogaeth galw ei hun. 88 00:04:02,200 --> 00:04:05,940 >> Ni fydd yn galw ei hun yn union yr un ffordd y cafodd ei alw. 89 00:04:05,940 --> 00:04:08,880 Bydd yn amrywiad bach ar sy'n gwneud y broblem 'i' 90 00:04:08,880 --> 00:04:11,497 yn ceisio datrys ychydig teeny llai. 91 00:04:11,497 --> 00:04:14,330 Ond yn gyffredinol mae'n pasio baich o ddatrys y rhan fwyaf o'r ateb 92 00:04:14,330 --> 00:04:17,450 i alwad gwahanol i lawr y lein. 93 00:04:17,450 --> 00:04:20,290 >> Pa un o'r edrych hyn fel yr achos sylfaenol yma? 94 00:04:20,290 --> 00:04:25,384 Pa un o'r rhain yn edrych fel y ateb symlaf i broblem? 95 00:04:25,384 --> 00:04:27,550 Mae gennym griw o factorials, a gallem barhau 96 00:04:27,550 --> 00:04:30,470 mynd on-- 6, 7, 8, 9, 10, ac yn y blaen. 97 00:04:30,470 --> 00:04:34,130 >> Ond un o steiliau hyn fel achos da i fod yn achos sylfaenol. 98 00:04:34,130 --> 00:04:35,310 Mae'n ateb syml iawn. 99 00:04:35,310 --> 00:04:37,810 Nid oes rhaid i ni wneud unrhyw beth arbennig. 100 00:04:37,810 --> 00:04:40,560 >> Mae ffactoraidd o 1 yn unig yw 1. 101 00:04:40,560 --> 00:04:42,790 Nid oes rhaid i ni wneud unrhyw lluosi o gwbl. 102 00:04:42,790 --> 00:04:45,248 Mae'n ymddangos fel pe ydym yn mynd i geisio datrys y broblem hon, 103 00:04:45,248 --> 00:04:47,600 ac mae angen i ni atal y recursion yn rhywle, 104 00:04:47,600 --> 00:04:50,610 mae'n debyg am roi'r gorau pan gawn i 1. 105 00:04:50,610 --> 00:04:54,580 Nid ydym am i roi'r gorau cyn hynny. 106 00:04:54,580 --> 00:04:56,660 >> Felly, os ydym yn diffinio ein swyddogaeth ffactoraidd, 107 00:04:56,660 --> 00:04:58,690 dyma sgerbwd ar gyfer sut y gallwn wneud hynny. 108 00:04:58,690 --> 00:05:03,110 Mae angen i ni dopio mewn dwy rhai things-- yr achos sylfaenol a'r achos ailadroddus. 109 00:05:03,110 --> 00:05:04,990 Beth yw'r achos sylfaenol? 110 00:05:04,990 --> 00:05:10,150 Os yw n yn hafal i 1, dychwelyd 1-- dyna broblem wirioneddol syml i'w datrys. 111 00:05:10,150 --> 00:05:11,890 >> Mae ffactoraidd o 1 yw 1. 112 00:05:11,890 --> 00:05:13,860 Dyw hi ddim yn 1 amserau unrhyw beth. 113 00:05:13,860 --> 00:05:15,020 Dim ond 1. 114 00:05:15,020 --> 00:05:17,170 Mae'n ffaith hawdd iawn. 115 00:05:17,170 --> 00:05:19,620 Ac felly gall hynny fod yn ein achos sylfaenol. 116 00:05:19,620 --> 00:05:24,730 Os byddwn yn cael eu pasio i mewn i hyn 1 swyddogaeth, byddwn yn jyst yn dychwelyd 1. 117 00:05:24,730 --> 00:05:27,320 >> Beth yw'r dychweliadol yn ôl pob tebyg achos yn edrych? 118 00:05:27,320 --> 00:05:32,445 Ar gyfer pob rhif arall eithr 1, beth yw'r patrwm? 119 00:05:32,445 --> 00:05:35,780 Wel, os ydym yn cymryd ffactorial n, 120 00:05:35,780 --> 00:05:38,160 'i' amseroedd n ffactorial n minws 1. 121 00:05:38,160 --> 00:05:42,130 >> Os ydym yn cymryd y ffactorial o 3, 'i' 3 gwaith y ffactorial o 3 minws 1, 122 00:05:42,130 --> 00:05:43,070 neu 2. 123 00:05:43,070 --> 00:05:47,330 Ac felly os nad ydym yn gan edrych ar 1, fel arall 124 00:05:47,330 --> 00:05:51,710 Amseroedd dychwelyd n y ffactorial n minws 1. 125 00:05:51,710 --> 00:05:53,210 Mae'n eithaf syml. 126 00:05:53,210 --> 00:05:57,360 >> Ac er mwyn cael ychydig yn glanach a chod mwy cain, 127 00:05:57,360 --> 00:06:01,440 gwybod os ydym wedi ddolenni-lein sengl neu un-lein canghennau amodol, 128 00:06:01,440 --> 00:06:04,490 gallwn gael gwared ar bob un o'r bresys cyrliog o'u cwmpas. 129 00:06:04,490 --> 00:06:06,850 Felly, gallwn atgyfnerthu'r hyn at hyn. 130 00:06:06,850 --> 00:06:09,640 Mae hyn wedi union yr un fath ymarferoldeb fel hyn. 131 00:06:09,640 --> 00:06:13,850 >> Im 'jyst yn cymryd i ffwrdd y cyrliog bresys, oherwydd dim ond un llinell 132 00:06:13,850 --> 00:06:18,500 tu mewn canghennau amodol hynny. 133 00:06:18,500 --> 00:06:21,160 Felly mae'r rhain yn ymddwyn yn union yr un fath. 134 00:06:21,160 --> 00:06:23,800 Os yw n yn hafal i 1, dychwelyd 1. 135 00:06:23,800 --> 00:06:28,351 Fel arall dychwelyd amseroedd n ffactorial n minws 1. 136 00:06:28,351 --> 00:06:29,850 Felly, rydym yn gwneud y broblem yn llai. 137 00:06:29,850 --> 00:06:33,850 Os yw n dechrau allan fel 5, rydym yn mynd i dychwelyd 5 gwaith yr ffactoraidd o 4. 138 00:06:33,850 --> 00:06:37,100 A byddwn yn gweld mewn munud pan fyddwn yn sôn am y stack-- galw i mewn 'n fideo arall 139 00:06:37,100 --> 00:06:39,390 lle rydym yn siarad am y ffoniwch stack-- byddwn yn dysgu 140 00:06:39,390 --> 00:06:41,630 ynghylch pam yn union y broses hon yn gweithio. 141 00:06:41,630 --> 00:06:46,970 >> Ond er bod ffactoraidd o 5 yn dweud dychwelyd 5 gwaith ffactoraidd o 4, a 4 142 00:06:46,970 --> 00:06:49,710 yn mynd i ddweud, OK, wel, yn dychwelyd 4 gwaith y ffactoraidd o 3. 143 00:06:49,710 --> 00:06:51,737 Ac fel y gwelwch, rydym yn math o agosáu 1. 144 00:06:51,737 --> 00:06:53,820 Rydym yn mynd yn agosach a yn nes at yr achos sylfaenol. 145 00:06:53,820 --> 00:06:58,180 >> Ac ar ôl i ni gyrraedd yr achos sylfaenol, holl swyddogaethau blaenorol 146 00:06:58,180 --> 00:07:00,540 cael yr ateb eu bod yn chwilio am. 147 00:07:00,540 --> 00:07:03,900 Roedd ffactorial o 2 yn dweud yn dychwelyd 2 waith y ffactoraidd o 1. 148 00:07:03,900 --> 00:07:06,760 Wel, ffactoraidd o 1 yn dychwelyd 1. 149 00:07:06,760 --> 00:07:10,090 Felly yr alwad am ffactoraidd Gall o 2 yn dychwelyd 2 waith 1, 150 00:07:10,090 --> 00:07:13,980 ac yn rhoi bod yn ôl i ffactoraidd o 3, sydd yn aros am y canlyniad. 151 00:07:13,980 --> 00:07:17,110 >> Ac yna gall gyfrifo ei ganlyniad, 3 gwaith 2 yw 6, 152 00:07:17,110 --> 00:07:18,907 ac yn rhoi yn ôl i ffactor o 4. 153 00:07:18,907 --> 00:07:20,740 Ac eto, mae gennym fideo ar y pentwr alwad 154 00:07:20,740 --> 00:07:23,810 lle mae hyn yn cael ei ddangos ychydig mwy na'r hyn yr wyf ddim yn dweud ar hyn o bryd. 155 00:07:23,810 --> 00:07:25,300 Ond mae hyn yn ei. 156 00:07:25,300 --> 00:07:29,300 Hyn yn unig yw'r ateb i cyfrifo ffactorial o nifer. 157 00:07:29,300 --> 00:07:31,527 >> Dim ond pedair llinell o god. 158 00:07:31,527 --> 00:07:32,610 Dyna 'n bert oera, dde? 159 00:07:32,610 --> 00:07:35,480 Mae'n fath o sexy. 160 00:07:35,480 --> 00:07:38,580 >> Felly, yn gyffredinol, ond nid bob amser, swyddogaeth ailadroddus 161 00:07:38,580 --> 00:07:41,190 Gall gymryd lle dolen mewn swyddogaeth heb fod yn ailadroddus. 162 00:07:41,190 --> 00:07:46,100 Felly dyma, ochr yn ochr, yw'r iterus fersiwn o'r swyddogaeth ffactoraidd. 163 00:07:46,100 --> 00:07:49,650 Mae'r ddau o'r rhain yn cyfrifo yn union yr un peth. 164 00:07:49,650 --> 00:07:52,170 >> Mae'r ddau yn cyfrifo ffactorial n. 165 00:07:52,170 --> 00:07:54,990 Mae'r fersiwn ar y chwith defnyddio recursion i wneud hynny. 166 00:07:54,990 --> 00:07:58,320 Mae'r fersiwn ar y dde defnyddio iteriad i wneud hynny. 167 00:07:58,320 --> 00:08:02,050 >> A rhybudd, mae'n rhaid i ni ddatgan newidyn cynnyrch cyfanrif. 168 00:08:02,050 --> 00:08:02,940 Ac yna rydym yn ddolen. 169 00:08:02,940 --> 00:08:06,790 Cyn belled â n yn fwy na 0, rydym cadw lluosi cynnyrch hwnnw gan n 170 00:08:06,790 --> 00:08:09,890 a decrementing n nes rydym yn cyfrifo'r cynnyrch. 171 00:08:09,890 --> 00:08:14,600 Felly mae'r rhain ddwy swyddogaeth, unwaith eto, gwneud yn union yr un peth. 172 00:08:14,600 --> 00:08:19,980 Ond nid ydynt yn gwneud hynny mewn yn union yr un ffordd. 173 00:08:19,980 --> 00:08:22,430 >> Yn awr, mae'n bosibl gael mwy nag un ganolfan 174 00:08:22,430 --> 00:08:25,770 achos neu fwy nag un achos recursive, yn dibynnu 175 00:08:25,770 --> 00:08:27,670 ar beth yw eich swyddogaeth yn ceisio ei wneud. 176 00:08:27,670 --> 00:08:31,650 Nid ydych yn o angenrheidrwydd yn unig yn gyfyngedig i achos sylfaenol unigol neu dychweliadol sengl 177 00:08:31,650 --> 00:08:32,370 achos. 178 00:08:32,370 --> 00:08:35,320 Felly enghraifft o rywbeth gydag achosion sylfaenol lluosog 179 00:08:35,320 --> 00:08:37,830 allai fod this-- y Dilyniant rhif Fibonacci. 180 00:08:37,830 --> 00:08:41,549 >> Efallai y cofiwch o niwrnod ysgol elfennol 181 00:08:41,549 --> 00:08:45,740 bod y dilyniant Fibonacci ei ddiffinio fel this-- yr elfen gyntaf yw 0. 182 00:08:45,740 --> 00:08:46,890 Yr ail elfen yw 1. 183 00:08:46,890 --> 00:08:49,230 Mae'r ddau o'r rheiny yn unig trwy ddiffiniad. 184 00:08:49,230 --> 00:08:55,920 >> Yna bob elfen arall yn cael ei ddiffinio fel swm minws n 1 ac n minws 2. 185 00:08:55,920 --> 00:09:00,330 Felly mae'r drydedd elfen fyddai 0 ac 1 yn 1. 186 00:09:00,330 --> 00:09:03,280 Ac yna y bedwaredd elfen fyddai'r ail elfen, 1, 187 00:09:03,280 --> 00:09:06,550 yn ogystal â'r drydedd elfen, 1. 188 00:09:06,550 --> 00:09:08,507 A byddai hynny'n 2. 189 00:09:08,507 --> 00:09:09,340 Ac yn y blaen ac yn y blaen. 190 00:09:09,340 --> 00:09:11,680 >> Felly, yn yr achos hwn, mae gennym ddau achos sylfaen. 191 00:09:11,680 --> 00:09:14,850 Os yw n yn hafal i 1, yn dychwelyd 0. 192 00:09:14,850 --> 00:09:18,560 Os yw n yn hafal i 2, dychwelyd 1. 193 00:09:18,560 --> 00:09:25,930 Fel arall, yn dychwelyd Fibonacci n minws 1 plws Fibonacci n minws 2. 194 00:09:25,930 --> 00:09:27,180 >> Felly dyna achosion sylfaen lluosog. 195 00:09:27,180 --> 00:09:29,271 Beth am achosion recursive lluosog? 196 00:09:29,271 --> 00:09:31,520 Wel, mae rhywbeth Gelwir y dyfalu Collatz. 197 00:09:31,520 --> 00:09:34,630 Dydw i ddim yn mynd i ddweud, eich bod yn gwybod beth yw hwnnw, 198 00:09:34,630 --> 00:09:38,170 am ei fod mewn gwirionedd yn ein derfynol broblem ar gyfer y fideo penodol. 199 00:09:38,170 --> 00:09:43,220 Ac mae'n ein hymarfer i weithio ar y cyd. 200 00:09:43,220 --> 00:09:46,760 >> Felly, dyma beth mae'r Collatz dyfaliad yw-- 201 00:09:46,760 --> 00:09:48,820 mae'n berthnasol i bob cyfanrif positif. 202 00:09:48,820 --> 00:09:51,500 Ac mae'n dyfalu ei fod yn bob amser yn bosibl i fynd yn ôl 203 00:09:51,500 --> 00:09:55,060 i 1 os byddwch yn dilyn y camau hyn. 204 00:09:55,060 --> 00:09:57,560 Os yw n yw 1, roi'r gorau iddi. 205 00:09:57,560 --> 00:10:00,070 Rydym wedi mynd yn ôl i 1 os yw n 1. 206 00:10:00,070 --> 00:10:05,670 >> Fel arall, ewch drwy hyn broses eto ar n rhannu â 2. 207 00:10:05,670 --> 00:10:08,200 A gweld os allwch chi fynd yn ôl i 1. 208 00:10:08,200 --> 00:10:13,260 Fel arall, os n yn od, yn mynd drwy y broses hon unwaith eto ar 3n ac 1, 209 00:10:13,260 --> 00:10:15,552 neu 3 gwaith n plws 1. 210 00:10:15,552 --> 00:10:17,010 Felly dyma mae gennym achos sail unigol. 211 00:10:17,010 --> 00:10:18,430 Os yw n yn hafal i 1, roi'r gorau iddi. 212 00:10:18,430 --> 00:10:20,230 Nid ydym yn gwneud unrhyw mwy recursion. 213 00:10:20,230 --> 00:10:23,730 >> Ond mae gennym ddau achos recursive. 214 00:10:23,730 --> 00:10:28,750 Os yw n hyd yn oed, rydym yn ei wneud yn un ailadroddus achos, gan alw wedi'i rannu gan 2 n. 215 00:10:28,750 --> 00:10:33,950 Os yw n yn od, rydym yn gwneud gwahanol achos recursive ar 3 gwaith n plws 1. 216 00:10:33,950 --> 00:10:39,120 >> Ac felly y nod ar gyfer fideo hwn yw i gymryd ail, oedi y fideo, 217 00:10:39,120 --> 00:10:42,440 ac yn ceisio ysgrifennu hyn swyddogaeth recursive Collatz 218 00:10:42,440 --> 00:10:47,640 lle byddwch yn mynd heibio mewn gwerth a n, a mae'n cyfrifo faint o gamau y mae'n 219 00:10:47,640 --> 00:10:52,430 gymryd i fynd i 1 os ydych yn dechrau o n ac eich bod yn dilyn y camau hynny i fyny uchod. 220 00:10:52,430 --> 00:10:56,660 Os yw n yw 1, mae'n cymryd camau 0. 221 00:10:56,660 --> 00:11:00,190 Fel arall, mae'n mynd i cymryd un cam yn ogystal, fodd bynnag 222 00:11:00,190 --> 00:11:06,200 mae llawer o gamau y mae'n ei gymryd ar y naill n wedi'i rannu â 2 os n yn oed, neu 3n ac 1 223 00:11:06,200 --> 00:11:08,100 os n yn od. 224 00:11:08,100 --> 00:11:11,190 >> Yn awr, rydw i wedi rhoi i fyny ar y sgrin yma un neu ddau o bethau brawf ar eich cyfer, 225 00:11:11,190 --> 00:11:15,690 un neu ddau o achosion, profion ar gyfer chi, i weld beth amrywiol hyn rifau Collatz yw, 226 00:11:15,690 --> 00:11:17,440 a hefyd darlun o'r camau y 227 00:11:17,440 --> 00:11:20,390 Mae angen mynd drwy fel y gallwch math o weld y broses hon ar waith. 228 00:11:20,390 --> 00:11:24,222 Felly os n yn hafal i 1, Collatz o n yw 0. 229 00:11:24,222 --> 00:11:26,180 Nid oes rhaid i chi ei wneud unrhyw beth i fynd yn ôl i 1. 230 00:11:26,180 --> 00:11:27,600 Rydych yno eisoes. 231 00:11:27,600 --> 00:11:30,550 >> Os yw n yw 2, mae'n cymryd un cam i gyrraedd 1. 232 00:11:30,550 --> 00:11:31,810 Byddwch yn dechrau gyda 2. 233 00:11:31,810 --> 00:11:33,100 Wel, nid yw 2 yn hafal i 1. 234 00:11:33,100 --> 00:11:36,580 Felly, mae'n mynd i fod yn un cam yn ogystal â faint bynnag o gamau y mae'n 235 00:11:36,580 --> 00:11:38,015 yn cymryd ar rhannu'n n â 2. 236 00:11:38,015 --> 00:11:41,280 237 00:11:41,280 --> 00:11:42,910 >> 2 wedi'i rannu â 2 yw 1. 238 00:11:42,910 --> 00:11:47,200 Felly, mae'n cymryd un cam yn ogystal, fodd bynnag mae llawer o gamau y mae'n ei gymryd ar gyfer 1. 239 00:11:47,200 --> 00:11:49,720 1 yn cymryd camau sero. 240 00:11:49,720 --> 00:11:52,370 >> Ar gyfer 3, fel y gwelwch, mae yna eithaf ychydig o gamau sy'n gysylltiedig. 241 00:11:52,370 --> 00:11:53,590 Rydych yn mynd o 3. 242 00:11:53,590 --> 00:11:56,710 Ac yna byddwch yn mynd i 10, 5, 16, 8, 4, 2, 1. 243 00:11:56,710 --> 00:11:58,804 Mae'n cymryd saith cam i fynd yn ôl i 1. 244 00:11:58,804 --> 00:12:01,220 Ac fel y gwelwch, mae 'na cwpl achosion prawf eraill yma 245 00:12:01,220 --> 00:12:02,470 i brofi eich rhaglen. 246 00:12:02,470 --> 00:12:03,970 Felly unwaith eto, oedi y fideo. 247 00:12:03,970 --> 00:12:09,210 A byddaf yn mynd neidio yn ôl yn awr i beth mae'r broses ei hun yn fan hyn, 248 00:12:09,210 --> 00:12:11,390 pa dyfalu yw hyn. 249 00:12:11,390 --> 00:12:14,140 >> Weld a allwch chi chyfrif i maes sut i ddiffinio Collatz o n 250 00:12:14,140 --> 00:12:19,967 fel ei fod yn cyfrifo faint o camau y mae'n ei gymryd i gyrraedd 1. 251 00:12:19,967 --> 00:12:23,050 Felly, gobeithio, yr ydych wedi seibio y fideo ac nid ydych yn unig yn aros i mi 252 00:12:23,050 --> 00:12:25,820 i roi'r ateb i chi yma. 253 00:12:25,820 --> 00:12:29,120 Ond os ydych chi, yn dda, dyma yw'r ateb beth bynnag. 254 00:12:29,120 --> 00:12:33,070 >> Felly dyma ddiffiniad posibl y swyddogaeth Collatz. 255 00:12:33,070 --> 00:12:35,610 Mae ein sylfaen achos-- os n yn yn hafal i 1, byddwn yn dychwelyd 0. 256 00:12:35,610 --> 00:12:38,250 Nid yw'n cymryd unrhyw camau i fynd yn ôl i 1. 257 00:12:38,250 --> 00:12:42,710 >> Fel arall, mae gennym ddau cases-- recursive un ar gyfer eilrifau ac un ar gyfer od. 258 00:12:42,710 --> 00:12:47,164 Y ffordd yr wyf yn profi ar gyfer rhifau hyd yn oed yw i gadarnhau a oes n mod 2 yn dychwelyd 0. 259 00:12:47,164 --> 00:12:49,080 Mae hyn yn y bôn, unwaith eto, gofyn y cwestiwn, 260 00:12:49,080 --> 00:12:54,050 os cofiwch yw-- beth mod os byddaf rhannu n â 2 yw nad oes gweddill? 261 00:12:54,050 --> 00:12:55,470 Byddai hynny yn eilrif. 262 00:12:55,470 --> 00:13:01,370 >> Ac felly os n mod 2 yn dychwelyd 0 yw profi a yw hyn yn eilrif. 263 00:13:01,370 --> 00:13:04,250 Os felly, yr wyf am ddychwelyd 1, oherwydd mae hyn yn bendant 264 00:13:04,250 --> 00:13:09,270 gan gymryd un cam yn ogystal Collatz o pa bynnag rhif yn hanner mi. 265 00:13:09,270 --> 00:13:13,910 Fel arall, yr wyf am ddychwelyd 1 yn ogystal â Collatz o 3 gwaith n plws 1. 266 00:13:13,910 --> 00:13:16,060 Dyna oedd y llall cam recursive ein bod yn 267 00:13:16,060 --> 00:13:19,470 Gallai cymryd i gyfrifo'r Collatz-- nifer o gamau 268 00:13:19,470 --> 00:13:22,610 mae'n ei gymryd i fynd yn ôl i 1 Rhoddir rhif. 269 00:13:22,610 --> 00:13:24,610 Felly, gobeithio, yr enghraifft hon Rhoddodd ychydig bach i chi 270 00:13:24,610 --> 00:13:26,620 o flas o weithdrefnau ailadroddus. 271 00:13:26,620 --> 00:13:30,220 Gobeithio, yn eich barn chi cod yn ychydig yn fwy prydferth os cânt eu gweithredu 272 00:13:30,220 --> 00:13:32,760 mewn, ffordd ailadroddus cain. 273 00:13:32,760 --> 00:13:35,955 Ond hyd yn oed os na, recursion yn arf pwerus iawn serch hynny. 274 00:13:35,955 --> 00:13:38,330 Ac felly mae'n bendant yn rhywbeth i gael eich pen o gwmpas, 275 00:13:38,330 --> 00:13:41,360 oherwydd byddwch yn gallu creu rhaglenni 'n bert oera gan ddefnyddio recursion 276 00:13:41,360 --> 00:13:45,930 a allai fel arall fod yn gymhleth i ysgrifennu os ydych yn defnyddio dolenni a ailadrodd. 277 00:13:45,930 --> 00:13:46,980 Rwy'n Doug Lloyd. 278 00:13:46,980 --> 00:13:48,780 Mae hyn yn CS50. 279 00:13:48,780 --> 00:13:50,228