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.