Doug LLOYD: Eğer gördüyseniz özyineleme video,
Tüm süreç olabilir Biraz büyülü gibiydi.
Nasıl çalışır?
Işlevleri nasıl olduğunu biliyor musunuz onlar bekleyin ve başka bir değere beklemenize gerek
Farklı bir işlevden dönmek için İstediğimiz sonucu elde etmek için mi diyorsun?
>> Peki, bu işler sebebi ise çağrı yığını olarak bilinen bir şey.
Bir işlevini çağırdığınızda, Sistem belleğinde yer ayırmaktadır
Bu işlev için çalışmalarını yapmak.
Ve biz bellek bu parçalar dediğimiz Her bir fonksiyon için bir kenara ediliyor
Bir yığın çerçeve veya bir işlev çerçeve diyoruz.
Ve Tahmin edebileceğiniz gibi, Bu yığın çerçeveleri
bellek yığını parçası yaşıyor.
>> Birden fazla fonksiyon yığın çerçevesi belirli bir anda hafızada mevcut olabilir.
Ana bir işlev hareket çağırırsa, ve hareket yönünü çağırır,
Her üç fonksiyon açık kare var.
Ama aktif kareleri tüm var.
Bu gövdeler, bir istif halinde düzenlenmiştir.
Ve gelen çerçeve en son aranan
Fonksiyon yığının en üstüne her zaman açıktır.
Ve bu her zaman aktif karedir.
Sadece gerçekten hiç bir tane var Bir anda etkin olduğunu işlevi.
Bu yığının en üstüne biri.
>> Ne zaman bir işlev başka çağırır fonksiyonu, bu tür duraklama bastırır.
Bu tür bekliyor, beklemede.
Ve başka bir yığın çerçevesi itilir bunun üstüne yığınının üzerine.
Ve bu aktif çerçeve haline gelir.
Ve çerçeve hemen o beklemek gerekiyor altına
yine aktif çerçeve kadar onun işi devam etmeden önce.
Ne zaman bir fonksiyonudur tam ve bitti,
onun çerçeve yığını kapalı uzattı.
Bu terminoloji.
Ve çerçeve hemen altında, ben sadece dediğim gibi,
Yeni aktif çerçeve haline gelir.
>> Ve başka bir işlevini çağırırsa, tekrar duraklatmak için gidiyor.
İşte yeni işlevin yığın çerçevesi olacak yığının en üstüne itti.
Onun çalışma yapacağız.
Bu kapalı geri pop olabilir.
Ve diğer fonksiyon Aşağıda tekrar devam edebilirsiniz.
>> Yani görünümlü, yine bu yolla gidelim faktöriyel fonksiyonunun fikri
Biz tanımlanan yineleme Video görmek için
tam olarak nasıl bu işin arkasında sihirli özyineli süreç yaşanıyor.
Yani bu bizim tüm dosya, değil mi?
Biz iki tanımlanmış Ana ve aslında functions--.
Ve biz beklediğiniz gibi, Herhangi bir C programı gidiyor
Ana birinci satırında başlatın.
>> Bu yüzden ana için yeni bir yığın çerçevesi oluşturun.
Ve yayınlanmaya başlaması için gidiyor.
Ana aramalar printf.
Ve printf gidiyor 5 faktoriyelini çıktı.
Peki, bilmiyor 5 Ne faktöryel olduğunu
ve bu nedenle bu çağrı zaten Başka bir işlev çağrısı bağlı.
Yani ana orada duraklatmak için gidiyor.
Ben bırakacağım onun , orada renk ok
o aynı renk Sağdaki çerçeveyi yığını,
Ana dondurmak için gidiyor belirtmek için 5 faktöryel denir burada iken.
>> Yani 5 faktöryel denir.
Ve çok başlatmak için gidiyor faktöriyel fonksiyonunun başında.
Bu soru Ben 1 eşit am sorar?
1'e eşit 5 mi?
Hayır.
Yani aşağı gidecek Başka kısmı iade n kere
n eksi 1 faktöryel.
İyi tamam.
>> Yani şimdi, 5 faktöryel olan Başka bir çağrı bağlı
geçen faktöryel için parametresi olarak 4'de.
Ve böylece faktöryel arasında 5 çerçeve, kırmızı çerçeve o,
Orada dondurmak için gidiyor Bu çizginin ben belitmişsin
ve bitirmek için 4 faktöriyele bekleyin o zaman ki bunu yapmak için ihtiyaç duyduğu
Aktif Frame tekrar olabilir.
>> Yani 4 başlar faktöryel faktöryel başlangıcı.
1'e eşit 4 midir?
Hayır, bu yüzden aynı şeyi yapmak için gidiyor.
Bu başka şube aşağı gidecek.
Bu kod satırı almak için gidiyor.
Tamam, ben dört kez geri gidiyorum.
Ah, 3-- faktör yani faktöryel 4 3 terbiye faktöriyele bağlıdır.
>> Ve böylece 3 faktoriyelini aramak gerekiyor.
Ve bu olacak geçmesi bulunuyor Yine aynı işlem.
Bu, içinden başlar burada alır.
3 Faktöriyel bağlıdır 1 faktöriyele üzerinde.
2 başlar Yani faktöriyel, burada alır.
Bu 1 faktöriyel bağlıdır.
1 başlar Faktöriyel.
>> TAMAM.
Yani şimdi biz alıyoruz ilginç bir yerde, değil mi?
Yani şimdi, 1 ila 1 eşittir.
Ve böylece biz 1 dönmek.
Bu noktada, biz dönüyor.
Fonksiyon bitti.
It davranış var bu-- bunu yapmak için başka bir şey,
ve böylece yığın çerçevesi için 1 faktöryel kapalı açılır.
Bitti.
Bu 1 döndürdü.
Ve şimdi, 2 faktöryel, hangi Çerçeve altında hemen oldu
yığın, aktif çerçeve haline gelir.
>> Ve o pick up Tam kaldığı yerden.
Bir Faktöriyel bekliyor 1 çalışmalarını bitirmek için.
Şimdi tamamladı.
Ve böylece biz burada.
>> 1 Faktöriyel 1 değeri döndürdü.
2 kutu Yani faktöryel diyelim ki 2 kere 1 döndürür.
Onun iş şimdi yapılıyor.
Bu faktöryel için 2 döndürülür 3, bunun için bekliyordu hangi.
3 Faktöriyel artık üst çerçeve olduğunu yığınında aktif çerçeve.
Ve böylece Tamam, ben gidiyorum diyor 6 3 kez 2, geri dönmek için.
Ve bunu vereceğim faktöriyel geri değer
4, beni bekliyordu edilmiş olan.
Bitirdim.
3 Faktöriyel yığınını kapalı açılır ve 4 faktöryel artık aktif karedir.
>> 4 Tamam, 4 kez geri gidiyorum diyor altı yaşındayken 3 faktörlü.
Bu değer olduğu 3 faktöryel döndü.
Ve böylece 4 kez 6 24 olduğunu.
Ve ben geçmek gidiyorum Bu geri faktöryel için
5, beni bekliyordu edilmiş olan.
5 Faktöriyel artık aktif karedir.
Bu 5 kez geri gidiyor 4-- 5 kez 24 ya da 120-- faktör
ve bu değer vermek Geri sahip olan ana kadar
Bir çok sabırla bekliyor yığının altındaki uzun zaman.
>> Başladığı yer.
Bu çağrı yaptı.
Birkaç kare üstünde devraldı.
Şimdi geri yığının üstünde olduğunu.
Aktif çerçeve var.
Yani ana değer var 120 Geri 5 faktöriyel itibaren.
Bu kadar bekliyor Bu değer çıktı.
Ve sonra bitti.
Ana kod daha satırları var.
Yani ana çerçevesi kapalı açılan Yığın ve biz bitirdik.
>> Özyineleme nasıl çalıştığını Ve işte.
Bu yığın çerçeveleri işe nasıl.
Bu işlev çağrıları daha önce ne
sadece duraklama vardır bekliyor sonraki çağrılar için
böylece aktif hale gelebilir bitirmek çerçeve ve yapmaları gerekenleri bitirmek.
>> Ben Doug Lloyd değilim.
Bu CS50 olduğunu.