1 00:00:00,000 --> 00:00:05,860 >> [Музички] 2 00:00:05,860 --> 00:00:09,530 >> Даг LLOYD: Веројатно сметате дека код е само користи за да се постигне задача. 3 00:00:09,530 --> 00:00:10,450 Ти го пишувам надвор. 4 00:00:10,450 --> 00:00:11,664 Тоа го прави нешто. 5 00:00:11,664 --> 00:00:12,580 Тоа е доста тоа многу. 6 00:00:12,580 --> 00:00:13,160 >> Можете да го компајлирате. 7 00:00:13,160 --> 00:00:13,993 Ќе ја стартувате програмата. 8 00:00:13,993 --> 00:00:15,370 Вие ќе бидете добро да отидевме. 9 00:00:15,370 --> 00:00:17,520 >> Но, верувале или не, ако можете код за долго време, 10 00:00:17,520 --> 00:00:20,550 вие всушност може да дојде за да ја видите код како на нешто што е убаво. 11 00:00:20,550 --> 00:00:23,275 Тоа го решава проблемот во многу интересен начин, 12 00:00:23,275 --> 00:00:26,510 или таму е само нешто што навистина уредни за начинот на кој таа изгледа. 13 00:00:26,510 --> 00:00:28,750 Може да се смее во мене, но тоа е вистина. 14 00:00:28,750 --> 00:00:31,530 И рекурзијата е еден начин за да се добие овој вид на идеја 15 00:00:31,530 --> 00:00:34,090 на убава, елегантна изглед код. 16 00:00:34,090 --> 00:00:37,740 Што решава проблемите на начин на кој се интересни, лесно да се визуелизира, 17 00:00:37,740 --> 00:00:39,810 и изненадувачки кратко. 18 00:00:39,810 --> 00:00:43,190 >> Работи на начинот на рекурзија е, рекурзивен функција 19 00:00:43,190 --> 00:00:49,291 се дефинира како функција која повикува себе како дел од неговото извршување. 20 00:00:49,291 --> 00:00:51,790 Тоа може да изгледа малку чудно, и ќе видиме малку 21 00:00:51,790 --> 00:00:53,750 за тоа како тоа функционира во еден миг. 22 00:00:53,750 --> 00:00:55,560 Но, повторно, овие рекурзивен процедури се 23 00:00:55,560 --> 00:00:57,730 ќе биде толку елегантна затоа што тие се случува 24 00:00:57,730 --> 00:01:00,410 да се реши овој проблем без имаат сите овие други функции 25 00:01:00,410 --> 00:01:02,710 или овие долги петелки. 26 00:01:02,710 --> 00:01:06,310 Ќе видите дека овие рекурзивни постапките се случува да изгледа толку кратко. 27 00:01:06,310 --> 00:01:10,610 И тие навистина се случува да се направи Вашиот код изгледа многу поубаво. 28 00:01:10,610 --> 00:01:12,560 >> Јас ќе ви дадам еден пример на ова се види како 29 00:01:12,560 --> 00:01:14,880 може да се дефинира рекурзивна постапка. 30 00:01:14,880 --> 00:01:18,202 Значи, ако сте запознаени со оваа од математика, пред многу години, 31 00:01:18,202 --> 00:01:20,910 Има нешто наречен факториел на, што е обично 32 00:01:20,910 --> 00:01:25,340 означува како извичник, која е дефинирана во текот на сите позитивни цели броеви. 33 00:01:25,340 --> 00:01:28,850 И начинот на кој што п факториел се пресметува 34 00:01:28,850 --> 00:01:31,050 е ќе се мултиплицираат сите броеви помалку од 35 00:01:31,050 --> 00:01:33,750 или еднаква на n together-- сите цели броеви помалку од 36 00:01:33,750 --> 00:01:34,880 или еднаква на n заедно. 37 00:01:34,880 --> 00:01:39,850 >> Па 5 факториел е 5 пати 4 пати 3 пати 2 пати 1. 38 00:01:39,850 --> 00:01:43,020 И 4 факториел е 4 пати 3 пати 2 пати 1 и така натаму. 39 00:01:43,020 --> 00:01:44,800 Ќе го добиете идеја. 40 00:01:44,800 --> 00:01:47,060 >> Како програмери, ние не користете n, извичник. 41 00:01:47,060 --> 00:01:51,840 Па ние ќе се дефинира факториел функција како факт на n. 42 00:01:51,840 --> 00:01:56,897 И ние ќе го користат за да се создаде факториел рекурзивен решение на проблемот. 43 00:01:56,897 --> 00:01:59,230 И мислам дека може да се најдат дека тоа е многу повеќе визуелно 44 00:01:59,230 --> 00:02:02,380 привлечен од повторната верзија на ова, што 45 00:02:02,380 --> 00:02:05,010 ние, исто така, ќе погледнеме во еден момент. 46 00:02:05,010 --> 00:02:08,310 >> Па еве неколку facts-- каламбур intended-- 47 00:02:08,310 --> 00:02:10,169 за factorial-- на факториел функција. 48 00:02:10,169 --> 00:02:13,090 Факториел од 1, како што реков, е 1. 49 00:02:13,090 --> 00:02:15,690 Факториел од 2 е 2 пати 1. 50 00:02:15,690 --> 00:02:18,470 Факториел од 3 е 3 Времето е 2 пати 1, и така натаму. 51 00:02:18,470 --> 00:02:20,810 Ние разговаравме за 4 и 5 веќе. 52 00:02:20,810 --> 00:02:23,940 >> Но, гледајќи во ова, не е тоа вистина? 53 00:02:23,940 --> 00:02:28,220 Не факториел од само 2 2 пати факториел од 1? 54 00:02:28,220 --> 00:02:31,130 Мислам, факториел од 1 е 1. 55 00:02:31,130 --> 00:02:34,940 Па зошто да не можеме да речеме дека, бидејќи факториел од 2 е 2 пати 1, 56 00:02:34,940 --> 00:02:38,520 тоа е навистина само 2 пати факториел од 1? 57 00:02:38,520 --> 00:02:40,900 >> А потоа продолжување на таа идеја, не е фактор од 3 58 00:02:40,900 --> 00:02:44,080 само 3 пати факториел од 2? 59 00:02:44,080 --> 00:02:50,350 И факториел од 4 е 4 пати факториел од 3, и така натаму? 60 00:02:50,350 --> 00:02:52,530 Всушност, факториел на било кој број да се само 61 00:02:52,530 --> 00:02:54,660 биде искажана ако ние вид извршување на ова вечно. 62 00:02:54,660 --> 00:02:56,870 Ние може да се вид на генерализира факториел проблем 63 00:02:56,870 --> 00:02:59,910 како што тоа е n пати факториел од n 1 минус. 64 00:02:59,910 --> 00:03:04,840 Тоа е n пати производ на сите броеви помалку од мене. 65 00:03:04,840 --> 00:03:08,890 >> Оваа идеја, ова генерализација на проблемот, 66 00:03:08,890 --> 00:03:13,410 ни овозможува да рекурзивно дефинираат факториел функција. 67 00:03:13,410 --> 00:03:15,440 Кога ќе го дефинираме функција рекурзивно, има 68 00:03:15,440 --> 00:03:17,470 две работи кои треба да се биде дел од неа. 69 00:03:17,470 --> 00:03:20,990 Треба да имате нешто што се нарекува база на случајот, кој, кога ќе го активира, 70 00:03:20,990 --> 00:03:22,480 да запре на рекурзивен процес. 71 00:03:22,480 --> 00:03:25,300 >> Инаку, функција која што повикува itself-- како што може да imagine-- 72 00:03:25,300 --> 00:03:26,870 може да трае вечно. 73 00:03:26,870 --> 00:03:29,047 Функциски повици функцијата повици на функциски повици 74 00:03:29,047 --> 00:03:30,380 функцијата повикува функцијата. 75 00:03:30,380 --> 00:03:32,380 Ако не го имаат начин да го спречи тоа, вашата програма 76 00:03:32,380 --> 00:03:34,760 ќе биде ефикасно заглавени во бесконечна јамка. 77 00:03:34,760 --> 00:03:37,176 Тоа ќе несреќа на крајот, затоа што тоа ќе работи надвор од меморија. 78 00:03:37,176 --> 00:03:38,990 Но, тоа е до точка. 79 00:03:38,990 --> 00:03:42,210 >> Ние треба да имаат некој друг начин да се запре нешта, покрај нашата програма паѓа, 80 00:03:42,210 --> 00:03:46,010 бидејќи програмата што се урна е најверојатно не убава и елегантна. 81 00:03:46,010 --> 00:03:47,690 И така ние го нарекуваме овој основниот случај. 82 00:03:47,690 --> 00:03:50,610 Ова е едноставно решение за проблемот кој го запира 83 00:03:50,610 --> 00:03:52,770 рекурзивен процес од случуваат. 84 00:03:52,770 --> 00:03:55,220 Значи, тоа е еден дел од рекурзивен функција. 85 00:03:55,220 --> 00:03:56,820 >> Вториот дел е рекурзивен случај. 86 00:03:56,820 --> 00:03:59,195 И ова е местото каде што на рекурзија всушност, ќе се одржи. 87 00:03:59,195 --> 00:04:02,200 Ова е местото каде функција ќе се јавам. 88 00:04:02,200 --> 00:04:05,940 >> Тоа нема да се јавите во точно на ист начин како што беше наречена. 89 00:04:05,940 --> 00:04:08,880 Тоа ќе биде мала варијација што го прави тоа е проблем 90 00:04:08,880 --> 00:04:11,497 се обидува да реши еден teeny малку помали. 91 00:04:11,497 --> 00:04:14,330 Но тоа обично поминува префрлуваат за решавање на дел од решението 92 00:04:14,330 --> 00:04:17,450 на различни повик одредување на линија. 93 00:04:17,450 --> 00:04:20,290 >> Која од овие изглед како основен случај тука? 94 00:04:20,290 --> 00:04:25,384 Кој од овие изгледа како Наједноставниот решение на проблемот? 95 00:04:25,384 --> 00:04:27,550 Имаме еден куп на factorials, и ние би можеле да продолжат 96 00:04:27,550 --> 00:04:30,470 случува on-- 6, 7, 8, 9, 10, и така натаму. 97 00:04:30,470 --> 00:04:34,130 >> Но еден од овие личи на добар случај да биде база случај. 98 00:04:34,130 --> 00:04:35,310 Тоа е многу едноставно решение. 99 00:04:35,310 --> 00:04:37,810 Ние не треба да правите ништо посебно. 100 00:04:37,810 --> 00:04:40,560 >> Факториел од 1 е само 1. 101 00:04:40,560 --> 00:04:42,790 Ние не треба да направите било множење на сите. 102 00:04:42,790 --> 00:04:45,248 Ми се чини дека, ако ние се случува да се обиде да го реши овој проблем, 103 00:04:45,248 --> 00:04:47,600 и ние треба да се запре рекурзија некаде, 104 00:04:47,600 --> 00:04:50,610 ние најверојатно сакаат да престанат тоа кога ќе се добие на 1. 105 00:04:50,610 --> 00:04:54,580 Ние не сакаме да се запре пред тоа. 106 00:04:54,580 --> 00:04:56,660 >> Значи, ако ние сме дефинирање нашите факториел на, 107 00:04:56,660 --> 00:04:58,690 еве еден скелет за како да го направите тоа. 108 00:04:58,690 --> 00:05:03,110 Ние треба да го приклучиш во овие две things-- основното сценарио и рекурзивни случај. 109 00:05:03,110 --> 00:05:04,990 Што е основниот случај? 110 00:05:04,990 --> 00:05:10,150 Ако n е еднаков на 1, се врати 1-- тоа е навистина едноставен проблем да се реши. 111 00:05:10,150 --> 00:05:11,890 >> Факториел од 1 е 1. 112 00:05:11,890 --> 00:05:13,860 Тоа не е 1 пати ништо. 113 00:05:13,860 --> 00:05:15,020 Тоа е само 1. 114 00:05:15,020 --> 00:05:17,170 Тоа е многу лесно факт. 115 00:05:17,170 --> 00:05:19,620 И, така што може да биде наш основен случај. 116 00:05:19,620 --> 00:05:24,730 Ако можеме да се донесе во оваа 1 функција, ние само ќе се вратат 1. 117 00:05:24,730 --> 00:05:27,320 >> Што е рекурзивен случај веројатно изгледа? 118 00:05:27,320 --> 00:05:32,445 За секој друг број освен 1, што е шемата? 119 00:05:32,445 --> 00:05:35,780 Па, ако ние сме преземање факториел од n, 120 00:05:35,780 --> 00:05:38,160 тоа е n пати факториел од n 1 минус. 121 00:05:38,160 --> 00:05:42,130 >> Ако ние сме преземање факториел од 3, тоа е 3 пати факториел од 3 минус 1, 122 00:05:42,130 --> 00:05:43,070 или 2. 123 00:05:43,070 --> 00:05:47,330 И така, ако ние не сме гледа во 1, инаку 124 00:05:47,330 --> 00:05:51,710 враќање n пати факториел од n 1 минус. 125 00:05:51,710 --> 00:05:53,210 Тоа е прилично јасна. 126 00:05:53,210 --> 00:05:57,360 >> И за доброто на се има малку почиста и поелегантни код, 127 00:05:57,360 --> 00:06:01,440 знам дека ако имаме една линија јамки или еден ред условен гранки, 128 00:06:01,440 --> 00:06:04,490 ние може да се ослободи од сите на големи загради околу нив. 129 00:06:04,490 --> 00:06:06,850 За да можеме да ја консолидираме оваа на ова. 130 00:06:06,850 --> 00:06:09,640 Ова има иста функционалност што е оваа. 131 00:06:09,640 --> 00:06:13,850 >> Јас сум само одземање на кадрава протези, бидејќи има само една линија 132 00:06:13,850 --> 00:06:18,500 во внатрешноста на тие условен гранки. 133 00:06:18,500 --> 00:06:21,160 Значи овие се однесуваат идентично. 134 00:06:21,160 --> 00:06:23,800 Ако n е еднакво на 1, се врати 1. 135 00:06:23,800 --> 00:06:28,351 Инаку се вратат n пати факториел од n 1 минус. 136 00:06:28,351 --> 00:06:29,850 Па ние сме прави проблем помали. 137 00:06:29,850 --> 00:06:33,850 Ако n почнува како 5, ние ќе треба да врати 5 пати факториел од 4. 138 00:06:33,850 --> 00:06:37,100 И ќе видиме во една минута, кога зборуваме за stack-- повикот во друг видео 139 00:06:37,100 --> 00:06:39,390 кога зборуваме за јавете stack-- ние ќе научат 140 00:06:39,390 --> 00:06:41,630 за тоа зошто токму овој процес дела. 141 00:06:41,630 --> 00:06:46,970 >> Но, додека факториел од 5 вели врати 5 пати факториел од 4 и 4 142 00:06:46,970 --> 00:06:49,710 се случува да се каже, Добро, добро, враќање 4 пати факториел од 3. 143 00:06:49,710 --> 00:06:51,737 И како што можете да видите, ние сме вид приближува 1. 144 00:06:51,737 --> 00:06:53,820 Ние сме добивање поблиску и поблиску до таа база случај. 145 00:06:53,820 --> 00:06:58,180 >> И кога ќе се удри на база случај, сите од претходната функции 146 00:06:58,180 --> 00:07:00,540 имаме одговорот што го барате. 147 00:07:00,540 --> 00:07:03,900 Факториел од 2 велеше враќање 2 пати факториел од 1. 148 00:07:03,900 --> 00:07:06,760 Па, факториел од 1 враќа 1. 149 00:07:06,760 --> 00:07:10,090 Затоа конкурсот факториел можат да се вратат од 2 1 2 пати, 150 00:07:10,090 --> 00:07:13,980 и му даде назад кон факториел 3, кој е на чекање за тој резултат. 151 00:07:13,980 --> 00:07:17,110 >> И потоа може да се пресмета нејзиниот резултат, 3 пати 2 е 6, 152 00:07:17,110 --> 00:07:18,907 и го даде назад кон факториел од 4. 153 00:07:18,907 --> 00:07:20,740 И повторно, имаме видео на магацинот на повикот 154 00:07:20,740 --> 00:07:23,810 каде што тоа е илустрирано малку повеќе од она што сакам да кажам дека во моментов. 155 00:07:23,810 --> 00:07:25,300 Но, тоа е тоа. 156 00:07:25,300 --> 00:07:29,300 Ова е само решение за пресметување на факториел на број. 157 00:07:29,300 --> 00:07:31,527 >> Тоа е само четири линии на код. 158 00:07:31,527 --> 00:07:32,610 Тоа е прилично кул, нели? 159 00:07:32,610 --> 00:07:35,480 Тоа е вид на секси. 160 00:07:35,480 --> 00:07:38,580 >> Па воопшто, но не секогаш, рекурзивен функција 161 00:07:38,580 --> 00:07:41,190 може да го замени еден циклус во не-рекурзивен функција. 162 00:07:41,190 --> 00:07:46,100 Па еве, рамо до рамо, е итеративен верзија на факториел на. 163 00:07:46,100 --> 00:07:49,650 И двете од овие се пресмета токму истото. 164 00:07:49,650 --> 00:07:52,170 >> Тие двете се пресмета факториел од n. 165 00:07:52,170 --> 00:07:54,990 Верзијата на левата користи рекурзија да го направи тоа. 166 00:07:54,990 --> 00:07:58,320 Верзијата на десната користи повторување да го направи тоа. 167 00:07:58,320 --> 00:08:02,050 >> И информации, ние мора да се декларираат променлива цел број производ. 168 00:08:02,050 --> 00:08:02,940 А потоа ние јамка. 169 00:08:02,940 --> 00:08:06,790 Толку долго како што n е поголема од 0, ние задржи множење дека производот од страна н 170 00:08:06,790 --> 00:08:09,890 и decrementing n до ние се пресмета производот. 171 00:08:09,890 --> 00:08:14,600 Па овие две функции, повторно, направите токму истото. 172 00:08:14,600 --> 00:08:19,980 Но, тие не го прават тоа во токму на ист начин. 173 00:08:19,980 --> 00:08:22,430 >> Сега, можно е да се имаат повеќе од една база 174 00:08:22,430 --> 00:08:25,770 случај или повеќе од еден рекурзивен случај, во зависност 175 00:08:25,770 --> 00:08:27,670 на она што вашите функција се обидуваат да го направат. 176 00:08:27,670 --> 00:08:31,650 Вие не мора да се само ограничени на една база случај или една рекурзивен 177 00:08:31,650 --> 00:08:32,370 случај. 178 00:08:32,370 --> 00:08:35,320 Така пример за нешто со повеќе база случаи 179 00:08:35,320 --> 00:08:37,830 би можело да биде на this-- Фибоначиевата низа број. 180 00:08:37,830 --> 00:08:41,549 >> Може да се сети од ОУ дена 181 00:08:41,549 --> 00:08:45,740 дека низата на Фибоначи е дефинирана како this-- првиот елемент е 0. 182 00:08:45,740 --> 00:08:46,890 На вториот елемент е 1. 183 00:08:46,890 --> 00:08:49,230 И на оние кои се само по дефиниција. 184 00:08:49,230 --> 00:08:55,920 >> Тогаш секој друг елемент е дефинирана како збир на n минус 1 и n минус 2. 185 00:08:55,920 --> 00:09:00,330 Па на третиот елемент ќе биде 0 плус 1 е 1. 186 00:09:00,330 --> 00:09:03,280 А потоа и на четвртиот елемент ќе биде вториот елемент, 1, 187 00:09:03,280 --> 00:09:06,550 плус на третиот елемент, 1. 188 00:09:06,550 --> 00:09:08,507 И дека ќе биде 2. 189 00:09:08,507 --> 00:09:09,340 И така натаму и така натаму. 190 00:09:09,340 --> 00:09:11,680 >> Значи во овој случај, имаме две база случаи. 191 00:09:11,680 --> 00:09:14,850 Ако n е еднаков на 1, се врати 0. 192 00:09:14,850 --> 00:09:18,560 Ако n е еднакво на 2, се врати 1. 193 00:09:18,560 --> 00:09:25,930 Во спротивно, се врати на Фибоначи на n 1 минус плус Фибоначи од n минус 2. 194 00:09:25,930 --> 00:09:27,180 >> Значи тоа е повеќе база случаи. 195 00:09:27,180 --> 00:09:29,271 Што е со повеќе рекурзивен случаи? 196 00:09:29,271 --> 00:09:31,520 Па, таму е нешто наречен претпоставка Collatz. 197 00:09:31,520 --> 00:09:34,630 Јас не одам да се каже, Знаете ли што е тоа што, 198 00:09:34,630 --> 00:09:38,170 затоа што тоа е всушност нашата конечна Проблемот за оваа видео. 199 00:09:38,170 --> 00:09:43,220 И тоа е нашата вежба да работат заедно. 200 00:09:43,220 --> 00:09:46,760 >> Значи тука е она што Collatz претпоставка is-- 201 00:09:46,760 --> 00:09:48,820 Тој важи за секој позитивен цел број. 202 00:09:48,820 --> 00:09:51,500 И тоа се шпекулира дека тоа е секогаш е можно да се врати назад 203 00:09:51,500 --> 00:09:55,060 1, ако ги следите овие чекори. 204 00:09:55,060 --> 00:09:57,560 Ако n е 1, да престане. 205 00:09:57,560 --> 00:10:00,070 Имаме назад до 1 ако n е 1. 206 00:10:00,070 --> 00:10:05,670 >> Инаку, одат преку овој Процесот повторно на н поделено со 2. 207 00:10:05,670 --> 00:10:08,200 И да видиме дали може да се вратам на 1. 208 00:10:08,200 --> 00:10:13,260 Во спротивно, ако n е непарен, одат преку овој процес повторно на 3N плус 1, 209 00:10:13,260 --> 00:10:15,552 или 3 пати n плус 1. 210 00:10:15,552 --> 00:10:17,010 Значи тука имаме една база случај. 211 00:10:17,010 --> 00:10:18,430 Ако n е еднаков на 1, да престане. 212 00:10:18,430 --> 00:10:20,230 Да не правиш ништо повеќе рекурзија. 213 00:10:20,230 --> 00:10:23,730 >> Но, ние имаме две рекурзивен случаи. 214 00:10:23,730 --> 00:10:28,750 Ако n е дури, тоа го правиме еден рекурзивен случај, повикувајќи n поделено со 2. 215 00:10:28,750 --> 00:10:33,950 Ако n е непарен, тоа го правиме на поинаков рекурзивен случај на 3 пати n плус 1. 216 00:10:33,950 --> 00:10:39,120 >> И така цел за ова видео е да се земе втора, паузирање на видеото, 217 00:10:39,120 --> 00:10:42,440 и да се обиде и да го напишам ова рекурзивен функција Collatz 218 00:10:42,440 --> 00:10:47,640 каде што ќе помине во вредност n и го пресметува колку што чекори 219 00:10:47,640 --> 00:10:52,430 потребно да се добие на 1 ако почнете од n и да ги следат овие чекори до горе. 220 00:10:52,430 --> 00:10:56,660 Ако n е 1, тоа трае 0 чекори. 221 00:10:56,660 --> 00:11:00,190 Инаку, тоа се случува да земе еден чекор плус сепак 222 00:11:00,190 --> 00:11:06,200 многу чекори што е потребно на секоја n поделен со 2 ако n е дури, или 3N плус 1 223 00:11:06,200 --> 00:11:08,100 ако n е непарен. 224 00:11:08,100 --> 00:11:11,190 >> Сега, јас сум се стави на екранот овде неколку тест работи за вас, 225 00:11:11,190 --> 00:11:15,690 неколку случаи тестови за вас, за да ја видите она што овие различни Collatz броеви се, 226 00:11:15,690 --> 00:11:17,440 а исто така и за илустрација од чекорите кои 227 00:11:17,440 --> 00:11:20,390 треба да се качил преку па можете да вид на видите овој процес во акција. 228 00:11:20,390 --> 00:11:24,222 Па, ако n е еднаков на 1, Collatz на n е 0. 229 00:11:24,222 --> 00:11:26,180 Вие не треба да се направи ништо да се вратам на 1. 230 00:11:26,180 --> 00:11:27,600 Ти си веќе таму. 231 00:11:27,600 --> 00:11:30,550 >> Ако n е 2, што е потребно еден чекор за да се добие на 1. 232 00:11:30,550 --> 00:11:31,810 Ќе почнете со 2. 233 00:11:31,810 --> 00:11:33,100 Па, 2 не е еднаков на 1. 234 00:11:33,100 --> 00:11:36,580 Па затоа се случува да биде еден чекор плус тоа сепак многу чекори 235 00:11:36,580 --> 00:11:38,015 презема n поделено со 2. 236 00:11:38,015 --> 00:11:41,280 237 00:11:41,280 --> 00:11:42,910 >> 2 поделено со 2 е 1. 238 00:11:42,910 --> 00:11:47,200 Па го зема еден чекор плус сепак многу чекори што е потребно за 1. 239 00:11:47,200 --> 00:11:49,720 1 зема нула чекори. 240 00:11:49,720 --> 00:11:52,370 >> За 3, како што можете да видите, постои вклучени неколку чекори. 241 00:11:52,370 --> 00:11:53,590 Одите од 3. 242 00:11:53,590 --> 00:11:56,710 А потоа ќе оди во 10, 5, 16, 8, 4, 2, 1. 243 00:11:56,710 --> 00:11:58,804 Тоа трае седум чекори за да се вратам на 1. 244 00:11:58,804 --> 00:12:01,220 И како што можете да видите, постои неколку други случаи тест тука 245 00:12:01,220 --> 00:12:02,470 да пробате вашата програма. 246 00:12:02,470 --> 00:12:03,970 Значи, повторно, го паузирате видео. 247 00:12:03,970 --> 00:12:09,210 И јас ќе одам сега да скокнете назад на она што вистински процес е тука, 248 00:12:09,210 --> 00:12:11,390 она што ова е претпоставка. 249 00:12:11,390 --> 00:12:14,140 >> Види дали може да дознаам како да се дефинира Collatz на n 250 00:12:14,140 --> 00:12:19,967 така што тоа пресметува колку чекорите што е потребно за да се добие на 1. 251 00:12:19,967 --> 00:12:23,050 Па се надевам, ќе го паузира видеото и не само се чека за мене 252 00:12:23,050 --> 00:12:25,820 да ви даде одговор тука. 253 00:12:25,820 --> 00:12:29,120 Но, ако сте, добро, тука е одговорот во секој случај. 254 00:12:29,120 --> 00:12:33,070 >> Значи тука е можна дефиниција на функцијата Collatz. 255 00:12:33,070 --> 00:12:35,610 Нашата база case-- ако n е еднаков на 1, се враќаме 0. 256 00:12:35,610 --> 00:12:38,250 Тоа не презема чекори за да се вратам на 1. 257 00:12:38,250 --> 00:12:42,710 >> Инаку, имаме две рекурзивен cases-- еден за парни броеви и една за чудно. 258 00:12:42,710 --> 00:12:47,164 Начинот на кој јас се тестира за парни броеви е да се провери ако n МО 2 изнесува 0. 259 00:12:47,164 --> 00:12:49,080 Ова е во основа, повторно, го поставува прашањето, 260 00:12:49,080 --> 00:12:54,050 ако се потсетиме што МО is-- ако јас јаз n за 2 не постои остатокот? 261 00:12:54,050 --> 00:12:55,470 Тоа би било парен број. 262 00:12:55,470 --> 00:13:01,370 >> И така, ако n МО 2 е еднакво на 0 ова тестирање е парен број. 263 00:13:01,370 --> 00:13:04,250 Ако е така, би сакал да се врати 1, бидејќи ова е дефинитивно 264 00:13:04,250 --> 00:13:09,270 презема еден чекор плус Collatz на број што е половина од мене. 265 00:13:09,270 --> 00:13:13,910 Инаку, сакам да се вратат 1 плус Collatz од 3 пати n плус 1. 266 00:13:13,910 --> 00:13:16,060 Тоа беше од друга рекурзивен чекор што ние 267 00:13:16,060 --> 00:13:19,470 може да се земе да се пресмета Collatz-- на бројот на чекори 268 00:13:19,470 --> 00:13:22,610 што е потребно за да се вратат 1 даден број. 269 00:13:22,610 --> 00:13:24,610 Па се надевам, овој пример ти дал малку 270 00:13:24,610 --> 00:13:26,620 на вкусот на рекурзивен процедури. 271 00:13:26,620 --> 00:13:30,220 Се надеваме дека, мислите дека кодот е малку поубаво доколку се спроведат 272 00:13:30,220 --> 00:13:32,760 во домот, рекурзивни начин. 273 00:13:32,760 --> 00:13:35,955 Но, дури и ако не, рекурзија е навистина моќна алатка сепак. 274 00:13:35,955 --> 00:13:38,330 И така тоа е дефинитивно нешто за да ја добиете вашата глава околу себе, 275 00:13:38,330 --> 00:13:41,360 затоа што ќе бидете во можност да се создаде прилично кул програми со користење на рекурзија 276 00:13:41,360 --> 00:13:45,930 кои инаку би можеле да бидат комплексни да се напише ако сте со користење јамки и повторување. 277 00:13:45,930 --> 00:13:46,980 Јас сум Даг Лојд. 278 00:13:46,980 --> 00:13:48,780 Ова е CS50. 279 00:13:48,780 --> 00:13:50,228