DOUG LLOYD: Siz gördüm varsa recursion video, Bütün proses ola bilər bir az sehrli görünürdü. Bu necə işləyir? Funksiyaları necə bilirik ki, onlar gözləyin və başqa dəyər gözləmək lazımdır fərqli bir funksiyası qayıtmaq üçün istədiyimiz nəticəni əldə etmək üçün zəng? Bəli, bu işləri səbəbi var zəng yığını kimi tanınan bir şey. Bir funksiyası zəng zaman, Sistem yaddaşında yer kənara qoyur ki, funksiyası üçün iş üçün. Və biz yaddaş bu chunks zəng ki, hər funksiyası üçün kənara edilir yığını çərçivəsində və ya bir funksiyası çərçivəsində zəng. Və gözləyə bilər kimi, bu yığını çərçivəsində yaddaş yığını çərçivəsində yaşayır. Daha çox funksiya yığını çərçivəsində bir zamanda yaddaş mövcud ola bilər. Əsas funksiyası hərəkət çağırır, və hərəkət istiqamətində zənglər, üç funksiyaları açıq çərçivələri var. Lakin onlar fəal çərçivəsində bütün var. Bu çərçivəsində bir yığın təşkil edilir. Və çərçivə ən son adlı funksiyası yığını üst həmişə. Və həmişə fəal münasibət deyil. Yalnız həqiqətən heç bir var bir zamanda aktiv fəaliyyət göstərir. Bu yığını üst biridir. Bir funksiyası başqa çağırır funksiyası, bu cür fasilə presleri. Bu növ gözləyir gözləməyə edir. Və başqa bir yığını çərçivəsində sövq edir üst yığını üzərinə. Və fəal çərçivəsində olur. Və çərçivə dərhal Bu gözləmək lazımdır aşağıdakı yenidən aktiv çərçivəsində qədər Bu öz işini davam edə bilərsiniz əvvəl. Bir funksiyası tam və bunu, onun çərçivəsində yığını off atdı olunur. Ki, terminologiya var. Və çərçivə dərhal aşağıdakı, mən yalnız dediyim kimi, Yeni aktiv çərçivəsində olur. Və başqa bir funksiyası çağırır əgər, yenidən fasilə olacaq. Bu yeni funksiyasının yığını çərçivəsində olacaq yığını üst üzərində sövq ediləcək. Onun iş edəcəyik. Bu off geri pop bilər. Və digər funksiyası Aşağıdakı yenidən davam edə bilərsiniz. Belə ki, axtarır, yenə bu yolu gedək faktöryel funksiyası fikir biz müəyyən ki, recursion video görmək üçün dəqiq necə bu arxasında sehrli recursive prosesi yaşanır. Belə ki, bu bizim bütün fayl, sağ var? Biz iki müəyyən əsas və fakt funksiyaları. Və biz gözləyə bilər kimi, Hər hansı bir C proqram gedir əsas ilk xətti başlamaq üçün. Belə ki, biz əsas üçün yeni yığını çərçivəsində yaradır. Və bu yayınlanmaya başlaması olacaq. Main zənglər printf. Və printf gedir 5 faktöryel çap. Bəli, bu bilmir 5 nə faktöryel edir və bu çağırış artıq başqa funksiyası zəng asılı olaraq. Belə ki, əsas orada fasilə gedir. Mən tərk mý Ben onun , orada rəng arrow Bu kimi eyni rəng sağ çərçivəsində dəstə, Əsas dondurmaq gedir göstərir ki, 5 faktöryel adlanır burada isə. Belə ki, 5 faktöryel adlanır. Və bu çox da başlayacaq olacaq faktöryel funksiyası başlayan. Bu sual I 1 bərabər edirəm soruşur? 1 bərabər 5? Yox, yaxşı. Belə ki, aşağı getmək olacaq başqa hissəsi qaytarılması n dəfə n minus 1 faktöryel. OK, yaxşı. Belə ki, indi 5 faktöryel edir Başqa bir zəng asılı olaraq keçən faktöryel üçün parametr kimi 4. Və belə Faktorial 5 frame, qırmızı çərçivə ki, orada dondurmaq niyyətindədir ki, xətt mən qeyd etdik və başa çatdırmaq üçün 4 faktöryel gözləyin sonra ki, bunu etmək lazımdır nə aktiv nizama yenidən ola bilər. Belə ki, 4 başlayır faktöryel faktöryel başlanğıcı. 1 bərabər 4? Xeyr, belə ki, eyni şey olacaq. Başqa filialı aşağı getmək olacaq. Bu kodu ki, xətti almaq olacaq. OK, Mən dörd dəfə qayıtmaq üçün gedirəm. Oh, 3 edəcəyik faktöryel belə faktöryel 4 3 başa Faktorial asılıdır. Və belə ki, 3 faktöryel zəng etmək lazımdır. Və mý keçmək oldu yenə eyni proses. Bu vasitəsilə başlayır burada olur. 3 faktöryel asılıdır 1 faktöryel edir. 2 başlayır, belə ki, faktöryel, burada olur. Bu 1 Faktorial asılıdır. 1 başlayır faktöryel. OLDU. Belə ki, indi biz əldə edirik haradasa maraqlı, sağ? Belə ki, indi 1 1 bərabərdir. Və biz 1 qayıtmaq. Bu nöqtədə, biz qayıdacağıq. funksiyası həyata. Bu davranış var is-- bunu etmək üçün başqa heç bir şey, və belə yığını çərçivəsində üçün 1 faktöryel off pops. O başa. Bu 1 döndü. İndi, 2 faktöryel olan çərçivəsində aşağıdakı dərhal idi yığını, fəal çərçivəsində olur. Və ala bilərsiniz məhz bu off sol harada. Bu faktöryel gözləyir edilmişdir 1 öz işini başa çatdırmaq üçün. İndi başa çatıb. Və belə ki, burada biz. 1 faktöryel 1 dəyəri döndü. 2 can belə faktöryel demək 2 dəfə 1 qayıtmaq. Onun iş indi edilir. Bu faktöryel üçün 2 döndü oldu 3, bunun üçün gözləyirdi olan. 3 faktöryel indi top çərçivəsində, yığını fəal çərçivəsində. Və belə ki, OK, yaxşı, mən gedirəm deyir 6 3 dəfə 2, qayıtmaq üçün. Mən vermək gedirəm faktöryel geri qiymətləndiririk 4, məni gözləyir edilmişdir. Men etdim. 3 faktöryel yığını off pops, və 4 faktöryel indi aktiv münasibət deyil. 4 OK, mən 4 dəfə qayıtmaq üçün gedirəm deyir altı oldu 3 faktöryel. Ki, dəyəri idi ki, 3 faktöryel döndü. Və belə 4 dəfə 6 24. Mən keçmək üçün gedirəm ki, geri faktöryel üçün 5, məni gözləyir edilmişdir. 5 faktöryel indi aktiv münasibət deyil. 5 dəfə geri olacaq 4-- 5 dəfə 24, və ya 120-- faktöryel ki, dəyəri vermək geri olan, əsas bir çox səbirlə gözləyir yığını altında uzun müddət. Bu açılmış harada var. Bu çağırış etdi. Bir neçə çərçivəsində üst götürdü. İndi geri yığını üst edir. Aktiv frame var. Belə ki, əsas dəyər var 120 geri 5 Faktorial olan. Bu gözləyir edilmişdir ki, dəyəri çap. Və sonra bunu edir. Əsas kodu daha xətləri heç bir var. Belə ki, əsas çərçivəsində off pops yığını, və biz tamamlayın. Recursion necə ki, var. Ki yığını çərçivəsində necə var. Həmin funksiyası zənglər ki, əvvəllər baş yalnız fasilə var gözləyir sonrakı zənglər üçün 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. Mən Doug Lloyd edirəm. Bu CS50 edir.