1 00:00:00,000 --> 00:00:05,860 >> [MÜZİK OYUN] 2 00:00:05,860 --> 00:00:09,530 >> Doug LLOYD: Muhtemelen düşünüyorum Kod sadece bir görevi gerçekleştirmek için kullanılır. 3 00:00:09,530 --> 00:00:10,450 Bunu yazmak. 4 00:00:10,450 --> 00:00:11,664 Bu bir şey yok. 5 00:00:11,664 --> 00:00:12,580 Yani oldukça fazla. 6 00:00:12,580 --> 00:00:13,160 >> Bunu derlemek. 7 00:00:13,160 --> 00:00:13,993 Programı çalıştırın. 8 00:00:13,993 --> 00:00:15,370 Gitmek iyisin. 9 00:00:15,370 --> 00:00:17,520 >> Ama ister inan ister inanma, eğer Eğer, uzun bir süre için kodlama 10 00:00:17,520 --> 00:00:20,550 Aslında görmeye gelebilir güzel bir şey olarak kodu. 11 00:00:20,550 --> 00:00:23,275 Bu bir sorun olarak çözer çok ilginç bir şekilde, 12 00:00:23,275 --> 00:00:26,510 ya da gerçekten sadece bir şey var görünüyor yolu hakkında derli toplu. 13 00:00:26,510 --> 00:00:28,750 Sen gülüyor olabilir Bana, ama doğru. 14 00:00:28,750 --> 00:00:31,530 Ve yineleme bir yoludur sıralama bu fikir edinmek için 15 00:00:31,530 --> 00:00:34,090 güzel, zarif görünümlü kodu. 16 00:00:34,090 --> 00:00:37,740 Bu şekilde sorun çözer görselleştirmek kolay, ilginç 17 00:00:37,740 --> 00:00:39,810 ve şaşırtıcı derecede kısa. 18 00:00:39,810 --> 00:00:43,190 >> Yol yineleme çalışmaları özyinelemeli fonksiyon olduğunu 19 00:00:43,190 --> 00:00:49,291 çağıran bir fonksiyonu olarak tanımlanmaktadır kendisi yürütme parçası olarak. 20 00:00:49,291 --> 00:00:51,790 Yani, biraz garip görünebilir ve biz biraz göreceksiniz 21 00:00:51,790 --> 00:00:53,750 Bu bir an nasıl çalıştığı hakkında. 22 00:00:53,750 --> 00:00:55,560 Fakat yine de, bu özyinelemeli prosedürler 23 00:00:55,560 --> 00:00:57,730 çok zarif olacak Onlar gidiyoruz çünkü 24 00:00:57,730 --> 00:01:00,410 kalmadan bu sorunu çözmek için Tüm bu fonksiyonları olan 25 00:01:00,410 --> 00:01:02,710 ya bu uzun döngüler. 26 00:01:02,710 --> 00:01:06,310 Bu özyinelemeli görürsünüz prosedürler çok kısa bakmak için gidiyoruz. 27 00:01:06,310 --> 00:01:10,610 Ve onlar gerçekten yapacağız kodunuzu çok daha güzel görünüyorsun. 28 00:01:10,610 --> 00:01:12,560 >> Sana bir örnek vereyim Bu nasıl görmek için 29 00:01:12,560 --> 00:01:14,880 özyinelemeli prosedür tanımlanmış olabilir. 30 00:01:14,880 --> 00:01:18,202 Bu aşina iseniz Yani yıllar önce matematik sınıfından 31 00:01:18,202 --> 00:01:20,910 bir şey denir genellikle faktöryel fonksiyonu, 32 00:01:20,910 --> 00:01:25,340 ünlem işareti olarak gösterilen hangi tüm pozitif tamsayılar üzerinde tanımlanır. 33 00:01:25,340 --> 00:01:28,850 Ve yolu, n faktöryel hesaplanır 34 00:01:28,850 --> 00:01:31,050 Eğer tüm çarpın daha az sayılar 35 00:01:31,050 --> 00:01:33,750 eşit veya n beraber-- için tüm tamsayılar daha az 36 00:01:33,750 --> 00:01:34,880 ya da birlikte n eşittir. 37 00:01:34,880 --> 00:01:39,850 >> Yani 5 faktöryel 5 kat 4 kez 3 kere 2 kere 1. 38 00:01:39,850 --> 00:01:43,020 Ve 4 faktör 4 katıdır 3 kez 2 kez 1 ve benzerleri. 39 00:01:43,020 --> 00:01:44,800 Sen fikir olsun. 40 00:01:44,800 --> 00:01:47,060 >> Programcılar, biz yok n, ünlem işareti kullanın. 41 00:01:47,060 --> 00:01:51,840 Bu yüzden faktöryel tanımlarsınız n gerçeği olarak işlev. 42 00:01:51,840 --> 00:01:56,897 Ve biz oluşturmak için çarpınımını kullanacağız Bir soruna çözüm özyinelemeli. 43 00:01:56,897 --> 00:01:59,230 Ve seni bulmak düşünüyorum çok daha fazla görsel olduğunu 44 00:01:59,230 --> 00:02:02,380 iteratif daha çekici Bu sürümü, hangi 45 00:02:02,380 --> 00:02:05,010 biz de bir an bakmak gerekir. 46 00:02:05,010 --> 00:02:08,310 >> Yani burada bir çift vardır facts-- pun intended-- 47 00:02:08,310 --> 00:02:10,169 yaklaşık factorial-- faktöryel fonksiyonu. 48 00:02:10,169 --> 00:02:13,090 Dediğim gibi 1 faktöryel, 1'dir. 49 00:02:13,090 --> 00:02:15,690 2 faktöryel 2 kez 1. 50 00:02:15,690 --> 00:02:18,470 3 faktöryel 3'tür 2 katı benzeri kez 1 ve. 51 00:02:18,470 --> 00:02:20,810 Biz zaten 4 ve 5 hakkında konuştuk. 52 00:02:20,810 --> 00:02:23,940 >> Ama bu bakarak, bu doğru değil mi? 53 00:02:23,940 --> 00:02:28,220 2 faktöryel değil mi sadece 2 kez 1 faktöryel? 54 00:02:28,220 --> 00:02:31,130 Yani, 1 faktöryel 1'dir. 55 00:02:31,130 --> 00:02:34,940 Peki neden biz sadece söyleyemeyiz, 2 faktöryel 2 kez 1 olduğundan, 56 00:02:34,940 --> 00:02:38,520 gerçekten sadece 2 kez var 1 faktöryel? 57 00:02:38,520 --> 00:02:40,900 >> Ve sonra, bu fikri uzanan 3 faktöryel değil 58 00:02:40,900 --> 00:02:44,080 sadece 3 kez 2 faktöryel? 59 00:02:44,080 --> 00:02:50,350 Ve 4 faktöryel 4 katıdır böylece 3, ve faktöryel? 60 00:02:50,350 --> 00:02:52,530 Aslında, çok etkenli herhangi bir sayı sadece can 61 00:02:52,530 --> 00:02:54,660 tür biz eğer ifade edilebilir sonsuza dek bu yürütmek. 62 00:02:54,660 --> 00:02:56,870 Biz tür genelleme olabilir faktöryel sorun 63 00:02:56,870 --> 00:02:59,910 o olduğu gibi n kere n eksi 1 faktöryel. 64 00:02:59,910 --> 00:03:04,840 Bu n kat ürün var Tüm numaralar benden daha az. 65 00:03:04,840 --> 00:03:08,890 >> Bu fikir, bu Sorunun genelleme, 66 00:03:08,890 --> 00:03:13,410 Bize özyinelemeli sağlar faktöryel fonksiyonunu tanımlar. 67 00:03:13,410 --> 00:03:15,440 Bir işlevi tanımladığınızda yinelemeli, var 68 00:03:15,440 --> 00:03:17,470 bunun bir parçası olmak için gereken iki şey. 69 00:03:17,470 --> 00:03:20,990 Sen bir şey denilen olması gerekir Baz durumda, hangi, bunu tetikleyebilir zaman, 70 00:03:20,990 --> 00:03:22,480 özyinelemeli işlemini durduracak. 71 00:03:22,480 --> 00:03:25,300 >> Aksi takdirde, bir işlev çağrıları itself-- sen imagine-- edebileceğiniz gibi 72 00:03:25,300 --> 00:03:26,870 sonsuza kadar gidebiliriz. 73 00:03:26,870 --> 00:03:29,047 Fonksiyon işlevini çağırır işlev çağrıları çağrıları 74 00:03:29,047 --> 00:03:30,380 fonksiyon işlevini çağırır. 75 00:03:30,380 --> 00:03:32,380 Eğer bir yol yoksa , programınızı bunu durdurmak için 76 00:03:32,380 --> 00:03:34,760 etkin bir şekilde sıkışmış olacak sonsuz bir döngüye de. 77 00:03:34,760 --> 00:03:37,176 Bu, sonuçta kilitlenmesine bellekte dışarı kaçıyorum çünkü. 78 00:03:37,176 --> 00:03:38,990 Ama konumuz bu değil. 79 00:03:38,990 --> 00:03:42,210 >> Biz durdurmak için başka bir yol olması gerekir Program çökmesini yanında şeyler, 80 00:03:42,210 --> 00:03:46,010 çöker bir program için Muhtemelen güzel ya da şık değil. 81 00:03:46,010 --> 00:03:47,690 Ve böylece bu temel durum diyoruz. 82 00:03:47,690 --> 00:03:50,610 Bu basit bir çözümdür durur bir sorun 83 00:03:50,610 --> 00:03:52,770 meydana gelen özyineli süreç. 84 00:03:52,770 --> 00:03:55,220 Yani bir parçası özyinelemeli bir işlev. 85 00:03:55,220 --> 00:03:56,820 >> İkinci bölüm özyinelemeli bir durumdur. 86 00:03:56,820 --> 00:03:59,195 Ve bu nerede özyineleme olduğunu Aslında gerçekleşecek. 87 00:03:59,195 --> 00:04:02,200 Burası işlevi kendisini arayacak. 88 00:04:02,200 --> 00:04:05,940 >> Tam kendini aramayacağım Aynı şekilde o denirdi. 89 00:04:05,940 --> 00:04:08,880 Bu hafif bir varyasyon olacak İşte bu sorunun yapar 90 00:04:08,880 --> 00:04:11,497 ufacık biraz daha küçük çözmeye çalışıyor. 91 00:04:11,497 --> 00:04:14,330 Fakat genellikle bu kova geçer çözeltisinin bir kısmını çözmek 92 00:04:14,330 --> 00:04:17,450 satır aşağı farklı bir çağrı. 93 00:04:17,450 --> 00:04:20,290 >> Bu görünüm hangisi Burada taban durum gibi? 94 00:04:20,290 --> 00:04:25,384 Hangi gibi bu görünüyor biri Bir sorunun en basit çözüm? 95 00:04:25,384 --> 00:04:27,550 Biz faktöriyellerinin bir grup var, ve biz devam edebiliriz 96 00:04:27,550 --> 00:04:30,470 böylece on-- 6, 7, 8, 9, 10, ve gidiyor. 97 00:04:30,470 --> 00:04:34,130 >> Ama böyle bu görünüyor biri İyi durumda temel durum olması. 98 00:04:34,130 --> 00:04:35,310 Bu çok basit bir çözüm var. 99 00:04:35,310 --> 00:04:37,810 Biz özel bir şey yapmanıza gerek yok. 100 00:04:37,810 --> 00:04:40,560 >> 1 faktöryel sadece 1'dir. 101 00:04:40,560 --> 00:04:42,790 Biz herhangi birini yapmak zorunda değilsiniz çarpma vasıl tüm. 102 00:04:42,790 --> 00:04:45,248 Biz gidiyoruz gibi görünüyor denemek ve bu sorunu çözmek için, 103 00:04:45,248 --> 00:04:47,600 ve biz durdurmak gerekir yerde tekrarlama, 104 00:04:47,600 --> 00:04:50,610 biz muhtemelen durdurmak istiyorsanız biz 1 vardığımızda. 105 00:04:50,610 --> 00:04:54,580 Biz bundan önce durdurmak istemiyorum. 106 00:04:54,580 --> 00:04:56,660 >> Biz tanımlarken eğer öyleyse Bizim faktöryel fonksiyonu, 107 00:04:56,660 --> 00:04:58,690 Burada bir iskelet için var Biz bunu nasıl. 108 00:04:58,690 --> 00:05:03,110 Biz bu iki seyleri takmanız gerekir temel durum ve özyinelemeli durumda. 109 00:05:03,110 --> 00:05:04,990 Temel durum nedir? 110 00:05:04,990 --> 00:05:10,150 N 1 eşitse, dönüş 1-- işte Gerçekten basit bir sorun çözmek için. 111 00:05:10,150 --> 00:05:11,890 >> 1 faktöryel 1'dir. 112 00:05:11,890 --> 00:05:13,860 O değil 1 kez şey var. 113 00:05:13,860 --> 00:05:15,020 Bu sadece 1 var. 114 00:05:15,020 --> 00:05:17,170 Bu çok kolay bir gerçektir. 115 00:05:17,170 --> 00:05:19,620 Ve böylece bizim temel durum olabilir. 116 00:05:19,620 --> 00:05:24,730 Biz bu işe 1 geçmiş olsun Eğer fonksiyon, sadece 1 dönersiniz. 117 00:05:24,730 --> 00:05:27,320 >> Recursive neler var dava muhtemelen benziyor? 118 00:05:27,320 --> 00:05:32,445 Her numara için 1 yanında, desen nedir? 119 00:05:32,445 --> 00:05:35,780 Eh, biz alıyorsun eğer n faktöryel, 120 00:05:35,780 --> 00:05:38,160 bu kadar n kez n faktöryel eksi 1. 121 00:05:38,160 --> 00:05:42,130 >> Biz 3 faktoriyelini çekiyorsanız, o, 3 eksi 1 3 kez faktöryel var 122 00:05:42,130 --> 00:05:43,070 ya da 2. 123 00:05:43,070 --> 00:05:47,330 Ve biz değiliz eğer öyleyse Aksi takdirde, 1 bakıyor 124 00:05:47,330 --> 00:05:51,710 Dönüş n kere n eksi 1 faktöryel. 125 00:05:51,710 --> 00:05:53,210 Oldukça basit değil. 126 00:05:53,210 --> 00:05:57,360 >> Ve biraz sahip uğruna daha temiz ve kod daha şık, 127 00:05:57,360 --> 00:06:01,440 biliyoruz ki biz tek hat döngülere varsa ya da tek hat koşullu dallar, 128 00:06:01,440 --> 00:06:04,490 Biz tüm kurtulabilirsiniz çevrelerindeki kaşlı. 129 00:06:04,490 --> 00:06:06,850 Yani biz bu bu birleştirebilirsiniz. 130 00:06:06,850 --> 00:06:09,640 Bu aynı vardır Bu işlevsellik olarak. 131 00:06:09,640 --> 00:06:13,850 >> Ben sadece kıvırcık uzakta alıyorum sadece bir satır var, çünkü parantez 132 00:06:13,850 --> 00:06:18,500 Bu koşullu dallar içinde. 133 00:06:18,500 --> 00:06:21,160 Yani bunlar aynı şekilde davranır. 134 00:06:21,160 --> 00:06:23,800 N, 1 'e eşit olması durumunda, 1 dönmek. 135 00:06:23,800 --> 00:06:28,351 Aksi takdirde n kez iade n eksi 1 faktöryel. 136 00:06:28,351 --> 00:06:29,850 Bu yüzden küçük bir sorun yapıyoruz. 137 00:06:29,850 --> 00:06:33,850 N 5 olarak başlar, biz gidiyoruz 4 5 kez çarpınımını dönün. 138 00:06:33,850 --> 00:06:37,100 Ve biz konuşurken bir dakika içinde göreceksiniz Başka bir videoda çağrı stack-- hakkında 139 00:06:37,100 --> 00:06:39,390 nerede hakkında konuşmak Biz öğreneceksiniz stack-- çağrı 140 00:06:39,390 --> 00:06:41,630 tam olarak bu süreç çalıştığı hakkında neden. 141 00:06:41,630 --> 00:06:46,970 >> Ama 5 iken faktöryel diyor 5 kez faktöryel 4 dönmek ve 4 142 00:06:46,970 --> 00:06:49,710 Evet, tamam, demek oluyor, geri dönüş 4 kez 3 faktöryel. 143 00:06:49,710 --> 00:06:51,737 Gördüğünüz gibi, biz konum çeşit 1 yaklaşıyor. 144 00:06:51,737 --> 00:06:53,820 Biz yakın alıyoruz ve Bu taban durumda yakın. 145 00:06:53,820 --> 00:06:58,180 >> Ve biz baz davayı vurmak kez Önceki tüm fonksiyonlarını 146 00:06:58,180 --> 00:07:00,540 aradıkları cevabı var. 147 00:07:00,540 --> 00:07:03,900 2 Faktöriyel dönüşü diyordu 2 kez 1 faktöryel. 148 00:07:03,900 --> 00:07:06,760 Peki, 1 getiri 1 faktöryel. 149 00:07:06,760 --> 00:07:10,090 Faktöriyel Yani çağrısı 2, 2 kez 1 dönebilirsiniz 150 00:07:10,090 --> 00:07:13,980 ve faktöriyele için geri ver Bu sonuç için beklemektedir 3. 151 00:07:13,980 --> 00:07:17,110 >> Ve o zaman hesaplayabilirsiniz onun sonucu, 3 kez 2, 6 152 00:07:17,110 --> 00:07:18,907 ve 4 faktöriyele geri verin. 153 00:07:18,907 --> 00:07:20,740 Ve yine, biz var çağrı yığını video 154 00:07:20,740 --> 00:07:23,810 bu biraz gösterilmiş olup, Şu an söylüyorum daha fazla. 155 00:07:23,810 --> 00:07:25,300 Ama bu öyle. 156 00:07:25,300 --> 00:07:29,300 Bu tek başına çözüm Bir sayının faktöriyel hesaplarken. 157 00:07:29,300 --> 00:07:31,527 >> Bu kod sadece dört satırlık var. 158 00:07:31,527 --> 00:07:32,610 Bu doğru, oldukça serin? 159 00:07:32,610 --> 00:07:35,480 Seksi tür. 160 00:07:35,480 --> 00:07:38,580 >> Bu nedenle, genel olarak, ancak Her zaman, bir özyinelemeli fonksiyon 161 00:07:38,580 --> 00:07:41,190 Bir bir döngü yerine olmayan recursive fonksiyon. 162 00:07:41,190 --> 00:07:46,100 Yani burada, yan yana, iteratif bir faktöriyel fonksiyonunun sürümü. 163 00:07:46,100 --> 00:07:49,650 Bu hesapla her iki tam olarak aynı şey. 164 00:07:49,650 --> 00:07:52,170 >> Her ikisi de n faktöriyel hesaplayabilirsiniz. 165 00:07:52,170 --> 00:07:54,990 Soldaki versiyon Bunu yapmak için yineleme kullanır. 166 00:07:54,990 --> 00:07:58,320 Sağdaki sürümü Bunu yapmak için yineleme kullanır. 167 00:07:58,320 --> 00:08:02,050 >> Ve haber, biz bildirmek zorunda bir tamsayıdır ürünü değişken. 168 00:08:02,050 --> 00:08:02,940 Ve sonra döngü. 169 00:08:02,940 --> 00:08:06,790 Çok uzun n olarak biz, daha büyük 0 n tarafından bu ürün çarparak tutmak 170 00:08:06,790 --> 00:08:09,890 ve kadar n azaltma Biz ürünü hesaplar. 171 00:08:09,890 --> 00:08:14,600 Peki bu iki işlev, yine Tam olarak aynı şeyi yapmak. 172 00:08:14,600 --> 00:08:19,980 Ama bunu yapmayın aynı şekilde. 173 00:08:19,980 --> 00:08:22,430 >> Şimdi, bu mümkündür Birden fazla tabanı var 174 00:08:22,430 --> 00:08:25,770 durumda ya da birden fazla özyinelemeli durumda, bağlı 175 00:08:25,770 --> 00:08:27,670 Ne üzerinde işlev yapmaya çalışıyor. 176 00:08:27,670 --> 00:08:31,650 Sen mutlaka sadece bunlarla sınırlı değildir Tek bir temel durum ya da tek bir özyinelemeli 177 00:08:31,650 --> 00:08:32,370 dava. 178 00:08:32,370 --> 00:08:35,320 Şey Yani bir örnek Birden fazla baz vakalarla 179 00:08:35,320 --> 00:08:37,830 olabilir paha Fibonacci sayı dizisi. 180 00:08:37,830 --> 00:08:41,549 >> Sizden Hatırlayacağınız ilkokul günleri 181 00:08:41,549 --> 00:08:45,740 Fibonacci dizisi tanımlanır bu-- gibi ilk öğe 0 olduğunu. 182 00:08:45,740 --> 00:08:46,890 İkinci unsur 1'dir. 183 00:08:46,890 --> 00:08:49,230 Bunların ikisi de sadece tanım gereği vardır. 184 00:08:49,230 --> 00:08:55,920 >> Daha sonra her eleman tanımlanmıştır n eksi 1 ve n eksi 2 toplamı olarak. 185 00:08:55,920 --> 00:09:00,330 Üçüncü eleman 0 artı 1 1 olacaktır. 186 00:09:00,330 --> 00:09:03,280 Ve sonra dördüncü unsur İkinci unsur, 1 olur, 187 00:09:03,280 --> 00:09:06,550 artı üçüncü unsur, 1. 188 00:09:06,550 --> 00:09:08,507 Ve bu 2 olur. 189 00:09:08,507 --> 00:09:09,340 Ve böylece vb. 190 00:09:09,340 --> 00:09:11,680 >> Yani bu durumda, iki baz olgu var. 191 00:09:11,680 --> 00:09:14,850 N, 1 'e eşit olması durumunda, 0 dönmek. 192 00:09:14,850 --> 00:09:18,560 N, 2 ye eşit olduğu takdirde, 1 dönmek. 193 00:09:18,560 --> 00:09:25,930 Aksi takdirde, n Fibonacci'yi dönüş eksi 1 artı n eksi 2 Fibonacci. 194 00:09:25,930 --> 00:09:27,180 >> Böylece birden fazla baz davaları var. 195 00:09:27,180 --> 00:09:29,271 Ne Birden özyinelemeli durumlar hakkında? 196 00:09:29,271 --> 00:09:31,520 Peki, bir şey var Collatz varsayım denir. 197 00:09:31,520 --> 00:09:34,630 Ben söylemek gitmiyorum Eğer, ne olduğunu biliyorum 198 00:09:34,630 --> 00:09:38,170 Aslında bizim nihai çünkü Bu özel video için sorun. 199 00:09:38,170 --> 00:09:43,220 Ve bu bizim egzersiz Birlikte çalışmak. 200 00:09:43,220 --> 00:09:46,760 >> Yani burada ne Collatz varsayım o-- 201 00:09:46,760 --> 00:09:48,820 Her pozitif tamsayı için geçerlidir. 202 00:09:48,820 --> 00:09:51,500 Ve o olduğunu spekülasyon her zaman mümkün geri almak için 203 00:09:51,500 --> 00:09:55,060 1 adımları izlerseniz. 204 00:09:55,060 --> 00:09:57,560 N 1 ise, dur. 205 00:09:57,560 --> 00:10:00,070 N 1 ise biz 1'e geri var. 206 00:10:00,070 --> 00:10:05,670 >> Aksi takdirde, bu geçmesi süreç tekrar n 2'ye bölünür. 207 00:10:05,670 --> 00:10:08,200 Eğer 1'e geri alabilirsiniz ve bakın. 208 00:10:08,200 --> 00:10:13,260 N garip Aksi takdirde, geçmesi Yine 3n artı 1 bu süreç, 209 00:10:13,260 --> 00:10:15,552 veya 3 kez n artı 1. 210 00:10:15,552 --> 00:10:17,010 Yani burada biz tek bir baz durum var. 211 00:10:17,010 --> 00:10:18,430 N 1 eşitse, dur. 212 00:10:18,430 --> 00:10:20,230 Biz daha fazla özyineleme yapmıyoruz. 213 00:10:20,230 --> 00:10:23,730 >> Ama biz iki özyinelemeli olgu var. 214 00:10:23,730 --> 00:10:28,750 N bile varsa, biz tek özyinelemeli yapmak durum, n 2 bölü arıyor. 215 00:10:28,750 --> 00:10:33,950 N tek ise, farklı bir do 3 kez n-plus, 1 özyinelemeli durum. 216 00:10:33,950 --> 00:10:39,120 >> Ve böylece bu video için hedefi Bir saniye sürer videoyu duraklatmak için, 217 00:10:39,120 --> 00:10:42,440 ve denemek ve bu bilgileri recursive fonksiyon Collatz 218 00:10:42,440 --> 00:10:47,640 nerede bir değer n geçmesi ve o kaç adım onu ​​hesaplar 219 00:10:47,640 --> 00:10:52,430 Eğer n başlatırsanız 1 almak sürer ve yukarıdaki bu adımları takip. 220 00:10:52,430 --> 00:10:56,660 N 1 ise, 0 adımlar atmaktadır. 221 00:10:56,660 --> 00:11:00,190 Aksi takdirde, gidiyor Ancak bir adım artı almak 222 00:11:00,190 --> 00:11:06,200 o da n alır birçok adım 2 bölü n bile, ya da 3n + 1 ise 223 00:11:06,200 --> 00:11:08,100 n tek ise. 224 00:11:08,100 --> 00:11:11,190 >> Şimdi, burada ekranda koyduk Sizin için deney bir kaç şey, 225 00:11:11,190 --> 00:11:15,690 Sizin için testler durumlarda bir çift görmek için Bu çeşitli Collatz numaraları ne 226 00:11:15,690 --> 00:11:17,440 ve aynı zamanda bir örnek adımlardan 227 00:11:17,440 --> 00:11:20,390 böylece yapabilirsiniz gitti gerekiyor tür eylem bu süreci bakın. 228 00:11:20,390 --> 00:11:24,222 N eşittir Yani eğer 1, n Collatz 0'dır. 229 00:11:24,222 --> 00:11:26,180 Yapacak gerekmez şey 1'e geri almak için. 230 00:11:26,180 --> 00:11:27,600 Zaten oradayız. 231 00:11:27,600 --> 00:11:30,550 >> N, 2 ise, bu alır bir adım 1'e almak için. 232 00:11:30,550 --> 00:11:31,810 Sen 2 ile başlayın. 233 00:11:31,810 --> 00:11:33,100 Eh, 2 1'e eşit değildir. 234 00:11:33,100 --> 00:11:36,580 Yani bir adım olacak artı ancak birçok adım onu 235 00:11:36,580 --> 00:11:38,015 alır n 2'ye bölünür. 236 00:11:38,015 --> 00:11:41,280 237 00:11:41,280 --> 00:11:42,910 >> 2 ile bölünmesiyle 2 1'dir. 238 00:11:42,910 --> 00:11:47,200 Yani ancak bir adım artı alır birçok adım 1'e sürer. 239 00:11:47,200 --> 00:11:49,720 1 sıfır adımlar atmaktadır. 240 00:11:49,720 --> 00:11:52,370 >> Gördüğünüz gibi 3 için, var epeyce adımları içeriyordu. 241 00:11:52,370 --> 00:11:53,590 Sen 3 gidin. 242 00:11:53,590 --> 00:11:56,710 Ve sonra gitmek 10, 5, 16, 8, 4, 2, 1. 243 00:11:56,710 --> 00:11:58,804 O 1'e geri almak için yedi adımlar atmaktadır. 244 00:11:58,804 --> 00:12:01,220 Gördüğünüz gibi, orada bir Burada birkaç diğer test durumlarda 245 00:12:01,220 --> 00:12:02,470 Programınızı test etmek. 246 00:12:02,470 --> 00:12:03,970 Yani yine Videoyu duraklatmak. 247 00:12:03,970 --> 00:12:09,210 Ve ben şimdi geri atlamak gidersiniz Gerçek bir süreç burada ne 248 00:12:09,210 --> 00:12:11,390 Bu varsayım nedir. 249 00:12:11,390 --> 00:12:14,140 >> Eğer dışarı anlamaya görün n Collatz nasıl tanımlanacağı 250 00:12:14,140 --> 00:12:19,967 o kaç hesaplar, böylece 1'e almak için gereken adımları. 251 00:12:19,967 --> 00:12:23,050 Yani umarım, video duraklatılmış var ve sadece beni bekliyor değil 252 00:12:23,050 --> 00:12:25,820 Seni buraya cevap vermek için. 253 00:12:25,820 --> 00:12:29,120 Ama eğer, iyi, Burada cevabı zaten var. 254 00:12:29,120 --> 00:12:33,070 >> Yani burada bir olası tanım var Collatz fonksiyonunun. 255 00:12:33,070 --> 00:12:35,610 N ise bizim temel case-- 1'e eşit, biz 0 dönmek. 256 00:12:35,610 --> 00:12:38,250 Herhangi almaz adımlar, 1 geri almak için. 257 00:12:38,250 --> 00:12:42,710 >> Aksi takdirde, biz iki özyinelemeli cases-- var Hatta numaraları için tek ve garip için. 258 00:12:42,710 --> 00:12:47,164 Hatta sayılar test yolu n mod 2 0 eşitse kontrol etmektir. 259 00:12:47,164 --> 00:12:49,080 Bu, yine, temelde soruyu soran, 260 00:12:49,080 --> 00:12:54,050 Ne mod bu-- hatırlayacak olursak eğer 2 ile bölme n hiçbir kalan var mı? 261 00:12:54,050 --> 00:12:55,470 Bu bir çift sayı olacaktır. 262 00:12:55,470 --> 00:13:01,370 >> Ve böylece n mod 2 0 eşitse Test, bu bir çift sayıdır. 263 00:13:01,370 --> 00:13:04,250 Eğer öyleyse, ben 1 dönmek istiyorum, Bu kesinlikle, çünkü 264 00:13:04,250 --> 00:13:09,270 Bir adım artı Collatz alarak ne olursa olsun sayı benden yarısı kadardır. 265 00:13:09,270 --> 00:13:13,910 Aksi takdirde, ben 1 dönmek istiyorum artı Collatz 3 kez n artı 1. 266 00:13:13,910 --> 00:13:16,060 Bu da diğer oldu özyinelemeli adım biz 267 00:13:16,060 --> 00:13:19,470 hesaplamak sürebilir Adımların sayısını Collatz-- 268 00:13:19,470 --> 00:13:22,610 geri almak için gereken 1 bir numara verilir. 269 00:13:22,610 --> 00:13:24,610 Yani umarım, bu örnek Sana biraz verdi 270 00:13:24,610 --> 00:13:26,620 özyinelemeli prosedürlerin bir tat. 271 00:13:26,620 --> 00:13:30,220 Umarım, kod olduğunu düşünüyorum biraz daha, eğer güzel uygulanan 272 00:13:30,220 --> 00:13:32,760 Zarif, özyinelemeli bir şekilde. 273 00:13:32,760 --> 00:13:35,955 Bile Ama, özyineleme bir yine çok güçlü bir araçtır. 274 00:13:35,955 --> 00:13:38,330 Ve bu yüzden kesinlikle bir şey başınızın etrafında almak için, 275 00:13:38,330 --> 00:13:41,360 oluşturmak mümkün olacak çünkü özyineleme kullanarak oldukça serin programlar 276 00:13:41,360 --> 00:13:45,930 aksi takdirde yazmak için karmaşık olabilir Eğer döngüler ve yineleme kullanıyorsanız. 277 00:13:45,930 --> 00:13:46,980 Ben Doug Lloyd değilim. 278 00:13:46,980 --> 00:13:48,780 Bu CS50 olduğunu. 279 00:13:48,780 --> 00:13:50,228