1 00:00:00,000 --> 00:00:05,860 >> [موسیقی] 2 00:00:05,860 --> 00:00:09,530 >> داگ لوید: شما احتمالا فکر می کنم که کد استفاده می شود فقط برای به انجام رساندن یک کار است. 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 و راهی که N فاکتوریل محاسبه شده است 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 تلاش برای حل یک کمی ریزه کوچکتر است. 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 ما یک دسته از فاکتوریل، و ما می تواند ادامه 96 00:04:27,550 --> 00:04:30,470 رفتن شماها 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 ما نیاز به برق وصل در آن دو چیز در مورد پایه و صورت بازگشتی. 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 می توانید 2 بار 1 بازگشت، 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 ما است، حفظ ضرب که محصول توسط n 170 00:08:06,790 --> 00:08:09,890 طرح ساده 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 خب، چیزی وجود دارد به نام حدس کولاتز. 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 >> بنابراین در اینجا چیزی است که حدس کولاتز 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 >> در غیر این صورت، از طریق این فرایند دوباره در N تقسیم بر 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 و سعی کنید و نوشتن این تابع بازگشتی کولاتز 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 یک زن و شوهر از موارد آزمون برای شما، برای دیدن چه این اعداد مختلف کولاتز هستند، 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، کولاتز از 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 >> ببینید اگر شما می توانید از شکل چگونه به تعریف کولاتز از 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 >> بنابراین در اینجا یک تعریف ممکن است از تابع کولاتز. 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-- چه MOD اگر من تقسیم 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 برداشتن یک قدم به علاوه کولاتز از هر چه تعداد نیمی از من است. 265 00:13:09,270 --> 00:13:13,910 در غیر این صورت، من می خواهم به بازگشت 1 به علاوه کولاتز 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