0 00
Kuyrukta özyineleme (tail recursive) nedir? |
Kuyrukta özyineleme, hesaplamaların yapıldıktan sonra özyinelemenin son adımda yapıldığı özel bir özyineleme çeşitidir.
Tanım
Bir özyineleme fonksiyonunda yineleme yapılan kısım çözümün en sonda ise buna kuyrukta özyineleme (tail recursion) denir.
Esasında kuyrukta özyineleme fonksiyonu son adıma geldiğinde, ana fonksiyon tekrar başlamaktadır. Bu yönüyle döngülere ne kadar benzediğine dikkat ediniz.
Örnek
Aşağıda verilen kuyrukta özyineleme fonksiyonu n kadar yıldız (*) yazdırır.
Döngü
Kuyrukta özyineleme, normal özyineleme fonksiyonuna göre daha performanslıdır. Çünkü kuyrukta yineleme algoritmaları döngüler ile çok benzerdir ve derleyici tarafından döngüye çevrilerek optimize edilebilir.
Özyineleme
Kuyrukta özyineleme, özyinelemenin özel bir şeklidir. Aşağıda "kendinden önceki tam sayıları toplayan fonksiyon" normal özyinelemeli ve kuyrukta özyinelemeli olarak verilmiştir.
Bir özyineleme fonksiyonunda yineleme yapılan kısım çözümün en sonda ise buna kuyrukta özyineleme (tail recursion) denir.
Esasında kuyrukta özyineleme fonksiyonu son adıma geldiğinde, ana fonksiyon tekrar başlamaktadır. Bu yönüyle döngülere ne kadar benzediğine dikkat ediniz.
Örnek
Aşağıda verilen kuyrukta özyineleme fonksiyonu n kadar yıldız (*) yazdırır.
| function printStar(n) { if(n <= 0) return; }console.log("*"); printStar(n-1); |
Döngü
Kuyrukta özyineleme, normal özyineleme fonksiyonuna göre daha performanslıdır. Çünkü kuyrukta yineleme algoritmaları döngüler ile çok benzerdir ve derleyici tarafından döngüye çevrilerek optimize edilebilir.
| function printStar(n) { if(n <= 0) return; }for(var i=n; i>0; i--) console.log("*"); |
Özyineleme
Kuyrukta özyineleme, özyinelemenin özel bir şeklidir. Aşağıda "kendinden önceki tam sayıları toplayan fonksiyon" normal özyinelemeli ve kuyrukta özyinelemeli olarak verilmiştir.
| function sum(n) { if (n==0) return n; else return n + sum(n-1); } function tailSum(n,total) { if(!total) total = 0; if (n==0) return total; else return tailSum(n-1, total+n); } |
Bu alana not ekleyebilirsiniz.
Başka bir sorunuz mu var?
Yorumlar (0)
Henüz yorum yapılmamış.