Resimler gönderiler için kullanışlıdır. Ancak mümkün olduğunca az ve / veya küçük resimler kullanmak gerekir.
Bilgisayardaki bir hata mesajı veya kodu resim olarak eklemek yerine kendisini
kopyalayıp yapıştırın.
Resimler gönderiler için kullanışlıdır. Ancak mümkün olduğunca az ve / veya küçük resimler kullanmak gerekir.
Bilgisayardaki bir hata mesajı veya kodu resim olarak eklemek yerine kendisini
kopyalayıp yapıştırın.
0
JavaScript Fonksiyonları: Fonksiyonun Kendini Çağırması (Recursion)
Bir çok programlama dilinde olduğu gibi JavaScript fonksiyonları da kendilerini çağırabilir. Ancak bu durumda yine fonksiyon içinde kendini çağırma işini bir yerde biterecek bir kontrol mekanizması kurmak zorunludur. Aksi halde fonksiyon kendini çok fazla çağırdığında bir yığın taşması hatası alırız.
Ekrana gelen parametre değerlerini yazan basit bir örnek:
function yaz(adet) {
if (adet > 1)
yaz(adet - 1);
console.log(adet);
}
yaz(5);
Çıktısı:
1
2
3
4
5
Verilen bir sayıya kadar tüm pozitif tam sayıları toplayan örnek:
function ekle(sayi) {
if (sayi > 1)
return sayi + ekle(sayi - 1);
return sayi; // Sadece 1'i döndürür.
}
console.log(ekle(3));
Çıktısı:
6
Fonksiyon kendi içinden kendini çağırmaktadır. Çalışması şöyle olur:
- elke(3) ile fonsiyon çalıştırılır.
- Birinci çalıştırmada sayi değişkeninin değeri 3 olduğundan if'in altındaki return satırı çalıştırılır. Burada da sayıya (3'e) ekle fonksiyonu sayi-1 ile (2 ile) çağırılarak dönen sayı eklenir. Ancak henüz dönen bir değer yoktur. Birinci çalıştırmanın fonksiyon kapsamında sayi değişkeninin değeri 3 olarak kalır ve fonksiyonun kendini çağırdıktan sonra dönen değeri beklenir.
- İkinci çalıştırmada sayi değişkeninin değeri 2'dir. Fonksiyonun bu defaki çağırılmasında oluşturulan fonksiyon kapsamında sayının değeri 2 olarak tutulacak ve buna fonksiyonun kendisini sayının bir eksiği ile (1 ile) çağırmasından gelecek sonuç beklenecektir.
- Üçüncü çalıştırmada sayi değişkeninin değeri 1'dir. Bu yüzden if sınamasından geçemez ve if'in altındaki satır çalıştırılmaz (Başka bahsettiğimiz kontrol mekanizması). Sonuçta bir alt satıra geçebilir ve sayi değişkeninin değeri (1 değeri) döndürülür. Bu noktada fonksiyonun kendi kendini çağırması tamamlanmış olur.
- 3. maddedeki çalıştırma kapsamına 1 değeri ile dönülür. Bu kapsamda sayi değişkeninin değeri 2 olduğundan 2 + Dönen Değer yani 2 + 1 = 3 sonucu return ile döndürülür.
- 2. maddedeki çalıştırma kapsamına 3 değeri ile dönülür. Bu kapsamda sayi değişkeninin değeri 3 olduğundan 3 + DönenDeğer yani 3 + 3 = 6 sonucu return ile döndürülür.
- Fonksiyon kendine başka çağrı yapmadığından program akışı console.log satırına gider ve sonuçta çıktıya son dönen değer yani 6 yazdırılır.
Örnekteki fonksiyon tek başına şu örnekteki işi yapar:
function ekle(sayi) {
if (sayi > 1)
return sayi + ekle1(sayi - 1);
return sayi;
}
function ekle1(sayi) {
if (sayi > 1)
return sayi + ekle2(sayi - 1);
return sayi;
}
function ekle2(sayi) {
return sayi;
}
console.log(ekle(3));
Çıktısı:
6
Tabi bu örnek sadece 3'e kadar sayıları toplayabilir. Ancak hep aynı işlem fonksiyon ilk çağırılırken verilen parametre değeri adedince (örnekte 3) yapılacağından ve bu adet belirli bir değer olmayacağından fonksiyon başka bir fonksiyon yerine kendini çağırarak aynı işlemi farklı tekrar sayılarınca yapabilmektedir.
Bu işlem bir çeşit sahte kod ile şöyle izah edebilir :
function ekle(3) {
if (3 > 1)
return 3 + function ekle(2) {
if (2 > 1)
return 2 + function ekle(1) {
if (1 > 1)
... // Burası 1 > 1 olmadığından çalışırılmaz.
return 1; // Burası çalışır.
};
return 2; // Burası çalışmaz.
};
return 3; // Burası çalışmaz.
}
console.log(ekle(3));
JavaScript Fonksiyonları ile İlgili Makaleler:
Yazan: 18.06.16 23:08
canora101,387p
4ü
cevapsitesi.com'a katkınızdan dolayı teşekkür ederiz. Cevap yazarken lütfen şunlara dikkat edin:
Cevabınız açık ve net olmalıdır. Varsa alıntılar, bağlantılar, resim veya program kodu eklemelisiniz.
Eğer soru hakkında görüş bildirecekseniz veya cevap haricinde başka bir şey söylemek istiyorsanız yorum olarak yazın.
Tartışma çıkaracak cevaplardan kaçının, hitabınıza dikkat edin, "Kardeşim", "Arkadaşım" gibi ifadeler kullanmayın.
Eleştirmeyin. Sadece bilginizi gösterin ve fikrinizi söyleyin.
Büyük harf kullanmaktan ve cümle kurmaktan çekinmeyin. :)
Buraya yeni bir soru yazmayın, "benim de şöyle bir sorunum var" gibi eklemeler yapmayın. Sorunuz varsa yeni soru ekleyin.
ÜSLUP
ve SAYGI çok önemlidir. İnsanlar cevabınızdan çok üslubunuza dikkat ederler.
Cevabı, bir cevabın veya sorunun yorumu olarak dönüştürmek için ilgili cevabı veya soruyu tıklayın. [
İptal ]