1 00:00:00,000 --> 00:00:05,587 2 00:00:05,587 --> 00:00:07,670 DOUG LLOYD: Siz gördüm varsa recursion video, 3 00:00:07,670 --> 00:00:10,170 Bütün proses ola bilər bir az sehrli görünürdü. 4 00:00:10,170 --> 00:00:10,930 Bu necə işləyir? 5 00:00:10,930 --> 00:00:15,010 Funksiyaları necə bilirik ki, onlar gözləyin və başqa dəyər gözləmək lazımdır 6 00:00:15,010 --> 00:00:19,150 fərqli bir funksiyası qayıtmaq üçün istədiyimiz nəticəni əldə etmək üçün zəng? 7 00:00:19,150 --> 00:00:22,550 >> Bəli, bu işləri səbəbi var zəng yığını kimi tanınan bir şey. 8 00:00:22,550 --> 00:00:26,360 Bir funksiyası zəng zaman, Sistem yaddaşında yer kənara qoyur 9 00:00:26,360 --> 00:00:28,120 ki, funksiyası üçün iş üçün. 10 00:00:28,120 --> 00:00:31,720 Və biz yaddaş bu chunks zəng ki, hər funksiyası üçün kənara edilir 11 00:00:31,720 --> 00:00:35,670 yığını çərçivəsində və ya bir funksiyası çərçivəsində zəng. 12 00:00:35,670 --> 00:00:38,290 Və gözləyə bilər kimi, bu yığını çərçivəsində 13 00:00:38,290 --> 00:00:41,000 yaddaş yığını çərçivəsində yaşayır. 14 00:00:41,000 --> 00:00:43,960 15 00:00:43,960 --> 00:00:47,540 >> Daha çox funksiya yığını çərçivəsində bir zamanda yaddaş mövcud ola bilər. 16 00:00:47,540 --> 00:00:51,240 Əsas funksiyası hərəkət çağırır, və hərəkət istiqamətində zənglər, 17 00:00:51,240 --> 00:00:54,460 üç funksiyaları açıq çərçivələri var. 18 00:00:54,460 --> 00:00:57,350 Lakin onlar fəal çərçivəsində bütün var. 19 00:00:57,350 --> 00:00:59,410 Bu çərçivəsində bir yığın təşkil edilir. 20 00:00:59,410 --> 00:01:01,820 Və çərçivə ən son adlı 21 00:01:01,820 --> 00:01:04,390 funksiyası yığını üst həmişə. 22 00:01:04,390 --> 00:01:07,150 Və həmişə fəal münasibət deyil. 23 00:01:07,150 --> 00:01:10,420 Yalnız həqiqətən heç bir var bir zamanda aktiv fəaliyyət göstərir. 24 00:01:10,420 --> 00:01:12,420 Bu yığını üst biridir. 25 00:01:12,420 --> 00:01:17,620 >> Bir funksiyası başqa çağırır funksiyası, bu cür fasilə presleri. 26 00:01:17,620 --> 00:01:20,590 Bu növ gözləyir gözləməyə edir. 27 00:01:20,590 --> 00:01:24,050 Və başqa bir yığını çərçivəsində sövq edir üst yığını üzərinə. 28 00:01:24,050 --> 00:01:26,150 Və fəal çərçivəsində olur. 29 00:01:26,150 --> 00:01:28,600 Və çərçivə dərhal Bu gözləmək lazımdır aşağıdakı 30 00:01:28,600 --> 00:01:33,560 yenidən aktiv çərçivəsində qədər Bu öz işini davam edə bilərsiniz əvvəl. 31 00:01:33,560 --> 00:01:35,870 Bir funksiyası tam və bunu, 32 00:01:35,870 --> 00:01:37,720 onun çərçivəsində yığını off atdı olunur. 33 00:01:37,720 --> 00:01:38,950 Ki, terminologiya var. 34 00:01:38,950 --> 00:01:41,110 Və çərçivə dərhal aşağıdakı, mən yalnız dediyim kimi, 35 00:01:41,110 --> 00:01:42,880 Yeni aktiv çərçivəsində olur. 36 00:01:42,880 --> 00:01:45,960 >> Və başqa bir funksiyası çağırır əgər, yenidən fasilə olacaq. 37 00:01:45,960 --> 00:01:49,290 Bu yeni funksiyasının yığını çərçivəsində olacaq yığını üst üzərində sövq ediləcək. 38 00:01:49,290 --> 00:01:50,650 Onun iş edəcəyik. 39 00:01:50,650 --> 00:01:52,100 Bu off geri pop bilər. 40 00:01:52,100 --> 00:01:55,630 Və digər funksiyası Aşağıdakı yenidən davam edə bilərsiniz. 41 00:01:55,630 --> 00:02:00,080 >> Belə ki, axtarır, yenə bu yolu gedək faktöryel funksiyası fikir 42 00:02:00,080 --> 00:02:03,070 biz müəyyən ki, recursion video görmək üçün 43 00:02:03,070 --> 00:02:07,770 dəqiq necə bu arxasında sehrli recursive prosesi yaşanır. 44 00:02:07,770 --> 00:02:09,870 Belə ki, bu bizim bütün fayl, sağ var? 45 00:02:09,870 --> 00:02:14,000 Biz iki müəyyən əsas və fakt funksiyaları. 46 00:02:14,000 --> 00:02:15,980 Və biz gözləyə bilər kimi, Hər hansı bir C proqram gedir 47 00:02:15,980 --> 00:02:18,470 əsas ilk xətti başlamaq üçün. 48 00:02:18,470 --> 00:02:21,660 >> Belə ki, biz əsas üçün yeni yığını çərçivəsində yaradır. 49 00:02:21,660 --> 00:02:23,320 Və bu yayınlanmaya başlaması olacaq. 50 00:02:23,320 --> 00:02:25,270 Main zənglər printf. 51 00:02:25,270 --> 00:02:29,390 Və printf gedir 5 faktöryel çap. 52 00:02:29,390 --> 00:02:31,440 Bəli, bu bilmir 5 nə faktöryel edir 53 00:02:31,440 --> 00:02:35,620 və bu çağırış artıq başqa funksiyası zəng asılı olaraq. 54 00:02:35,620 --> 00:02:37,270 Belə ki, əsas orada fasilə gedir. 55 00:02:37,270 --> 00:02:39,103 Mən tərk mý Ben onun , orada rəng arrow 56 00:02:39,103 --> 00:02:41,360 Bu kimi eyni rəng sağ çərçivəsində dəstə, 57 00:02:41,360 --> 00:02:47,720 Əsas dondurmaq gedir göstərir ki, 5 faktöryel adlanır burada isə. 58 00:02:47,720 --> 00:02:49,300 >> Belə ki, 5 faktöryel adlanır. 59 00:02:49,300 --> 00:02:53,160 Və bu çox da başlayacaq olacaq faktöryel funksiyası başlayan. 60 00:02:53,160 --> 00:02:55,440 Bu sual I 1 bərabər edirəm soruşur? 61 00:02:55,440 --> 00:02:56,810 1 bərabər 5? 62 00:02:56,810 --> 00:02:57,410 Yox, yaxşı. 63 00:02:57,410 --> 00:03:01,110 Belə ki, aşağı getmək olacaq başqa hissəsi qaytarılması n dəfə 64 00:03:01,110 --> 00:03:02,990 n minus 1 faktöryel. 65 00:03:02,990 --> 00:03:03,490 OK, yaxşı. 66 00:03:03,490 --> 00:03:07,070 >> Belə ki, indi 5 faktöryel edir Başqa bir zəng asılı olaraq 67 00:03:07,070 --> 00:03:09,740 keçən faktöryel üçün parametr kimi 4. 68 00:03:09,740 --> 00:03:14,210 Və belə Faktorial 5 frame, qırmızı çərçivə ki, 69 00:03:14,210 --> 00:03:17,160 orada dondurmaq niyyətindədir ki, xətt mən qeyd etdik 70 00:03:17,160 --> 00:03:21,914 və başa çatdırmaq üçün 4 faktöryel gözləyin sonra ki, bunu etmək lazımdır nə 71 00:03:21,914 --> 00:03:23,330 aktiv nizama yenidən ola bilər. 72 00:03:23,330 --> 00:03:26,890 >> Belə ki, 4 başlayır faktöryel faktöryel başlanğıcı. 73 00:03:26,890 --> 00:03:28,556 1 bərabər 4? 74 00:03:28,556 --> 00:03:30,180 Xeyr, belə ki, eyni şey olacaq. 75 00:03:30,180 --> 00:03:31,590 Başqa filialı aşağı getmək olacaq. 76 00:03:31,590 --> 00:03:33,240 Bu kodu ki, xətti almaq olacaq. 77 00:03:33,240 --> 00:03:35,710 OK, Mən dörd dəfə qayıtmaq üçün gedirəm. 78 00:03:35,710 --> 00:03:41,270 Oh, 3 edəcəyik faktöryel belə faktöryel 4 3 başa Faktorial asılıdır. 79 00:03:41,270 --> 00:03:43,055 >> Və belə ki, 3 faktöryel zəng etmək lazımdır. 80 00:03:43,055 --> 00:03:45,180 Və mý keçmək oldu yenə eyni proses. 81 00:03:45,180 --> 00:03:48,200 Bu vasitəsilə başlayır burada olur. 82 00:03:48,200 --> 00:03:50,980 3 faktöryel asılıdır 1 faktöryel edir. 83 00:03:50,980 --> 00:03:53,750 2 başlayır, belə ki, faktöryel, burada olur. 84 00:03:53,750 --> 00:03:56,310 Bu 1 Faktorial asılıdır. 85 00:03:56,310 --> 00:03:57,430 1 başlayır faktöryel. 86 00:03:57,430 --> 00:03:57,650 >> OLDU. 87 00:03:57,650 --> 00:03:59,775 Belə ki, indi biz əldə edirik haradasa maraqlı, sağ? 88 00:03:59,775 --> 00:04:02,190 Belə ki, indi 1 1 bərabərdir. 89 00:04:02,190 --> 00:04:05,130 Və biz 1 qayıtmaq. 90 00:04:05,130 --> 00:04:06,770 Bu nöqtədə, biz qayıdacağıq. 91 00:04:06,770 --> 00:04:07,880 funksiyası həyata. 92 00:04:07,880 --> 00:04:11,140 Bu davranış var is-- bunu etmək üçün başqa heç bir şey, 93 00:04:11,140 --> 00:04:17,006 və belə yığını çərçivəsində üçün 1 faktöryel off pops. 94 00:04:17,006 --> 00:04:17,589 O başa. 95 00:04:17,589 --> 00:04:19,480 Bu 1 döndü. 96 00:04:19,480 --> 00:04:23,370 İndi, 2 faktöryel olan çərçivəsində aşağıdakı dərhal idi 97 00:04:23,370 --> 00:04:26,160 yığını, fəal çərçivəsində olur. 98 00:04:26,160 --> 00:04:29,030 >> Və ala bilərsiniz məhz bu off sol harada. 99 00:04:29,030 --> 00:04:32,240 Bu faktöryel gözləyir edilmişdir 1 öz işini başa çatdırmaq üçün. 100 00:04:32,240 --> 00:04:33,610 İndi başa çatıb. 101 00:04:33,610 --> 00:04:35,510 Və belə ki, burada biz. 102 00:04:35,510 --> 00:04:38,080 >> 1 faktöryel 1 dəyəri döndü. 103 00:04:38,080 --> 00:04:42,430 2 can belə faktöryel demək 2 dəfə 1 qayıtmaq. 104 00:04:42,430 --> 00:04:43,680 Onun iş indi edilir. 105 00:04:43,680 --> 00:04:49,110 Bu faktöryel üçün 2 döndü oldu 3, bunun üçün gözləyirdi olan. 106 00:04:49,110 --> 00:04:53,370 3 faktöryel indi top çərçivəsində, yığını fəal çərçivəsində. 107 00:04:53,370 --> 00:04:58,617 Və belə ki, OK, yaxşı, mən gedirəm deyir 6 3 dəfə 2, qayıtmaq üçün. 108 00:04:58,617 --> 00:05:00,700 Mən vermək gedirəm faktöryel geri qiymətləndiririk 109 00:05:00,700 --> 00:05:03,430 4, məni gözləyir edilmişdir. 110 00:05:03,430 --> 00:05:04,500 Men etdim. 111 00:05:04,500 --> 00:05:09,410 3 faktöryel yığını off pops, və 4 faktöryel indi aktiv münasibət deyil. 112 00:05:09,410 --> 00:05:13,510 >> 4 OK, mən 4 dəfə qayıtmaq üçün gedirəm deyir altı oldu 3 faktöryel. 113 00:05:13,510 --> 00:05:15,980 Ki, dəyəri idi ki, 3 faktöryel döndü. 114 00:05:15,980 --> 00:05:19,010 Və belə 4 dəfə 6 24. 115 00:05:19,010 --> 00:05:20,990 Mən keçmək üçün gedirəm ki, geri faktöryel üçün 116 00:05:20,990 --> 00:05:23,160 5, məni gözləyir edilmişdir. 117 00:05:23,160 --> 00:05:25,270 5 faktöryel indi aktiv münasibət deyil. 118 00:05:25,270 --> 00:05:30,700 5 dəfə geri olacaq 4-- 5 dəfə 24, və ya 120-- faktöryel 119 00:05:30,700 --> 00:05:32,722 ki, dəyəri vermək geri olan, əsas 120 00:05:32,722 --> 00:05:35,680 bir çox səbirlə gözləyir yığını altında uzun müddət. 121 00:05:35,680 --> 00:05:36,640 >> Bu açılmış harada var. 122 00:05:36,640 --> 00:05:37,670 Bu çağırış etdi. 123 00:05:37,670 --> 00:05:39,400 Bir neçə çərçivəsində üst götürdü. 124 00:05:39,400 --> 00:05:41,890 İndi geri yığını üst edir. 125 00:05:41,890 --> 00:05:43,450 Aktiv frame var. 126 00:05:43,450 --> 00:05:47,810 Belə ki, əsas dəyər var 120 geri 5 Faktorial olan. 127 00:05:47,810 --> 00:05:50,750 Bu gözləyir edilmişdir ki, dəyəri çap. 128 00:05:50,750 --> 00:05:51,657 Və sonra bunu edir. 129 00:05:51,657 --> 00:05:53,240 Əsas kodu daha xətləri heç bir var. 130 00:05:53,240 --> 00:05:56,800 Belə ki, əsas çərçivəsində off pops yığını, və biz tamamlayın. 131 00:05:56,800 --> 00:05:58,992 >> Recursion necə ki, var. 132 00:05:58,992 --> 00:06:00,200 Ki yığını çərçivəsində necə var. 133 00:06:00,200 --> 00:06:03,120 Həmin funksiyası zənglər ki, əvvəllər baş 134 00:06:03,120 --> 00:06:06,620 yalnız fasilə var gözləyir sonrakı zənglər üçün 135 00:06:06,620 --> 00:06:12,050 belə ki, onlar fəal ola bilər başa çatdırmaq üçün nizama və onlar nə etmək lazımdır nə başa. 136 00:06:12,050 --> 00:06:13,060 >> Mən Doug Lloyd edirəm. 137 00:06:13,060 --> 00:06:14,880 Bu CS50 edir. 138 00:06:14,880 --> 00:06:16,580