Selamun Aleyküm
1. def azalt(s):
2. if len(s) < 1:
3. return s
4. else:
5. print('özyineleme sürecine girerken:', s)
6. azalt(s[1:])
7. print('özyineleme sürecinden çıkarken:', s)
8. azalt('istihza')
Yukarıdaki kodlarda benim anladığım kadarı ile öz yinelemeli azalt()
fonksiyonu ilk çalışmaya başladığı anda içerisine parametre olarak girilmiş 'istihza'
stringinin uzunluğu 1’den küçük olmadığı için else bloğunun içi çalışıyor.
Bu blok içerisinde ilk olarak (5. satırda) string ekrana basılıyor. 6. satırda ise stringimizin 1. karakterinden sonuna kadarki kısmı 'stihza'
tekrardan fonksiyona parametre olarak gönderiliyor. Bu nedenle program 7. satırı çalıştırmadan tekrar başa dönüyor. Her seferinde parametre olarak girilen stringin ilk harfi [1:]
ifadesi ile çıkarılarak, geriye kalan kısmı tekrardan parametre olarak verilip fonksiyon tekrar çağrılıyor.
Ardından stringimiz tamamen boşalınca if bloğu içerisindeki return s
kodu çalışıyor ve öz yineleme işlemi bitiriliyor. Bu andan sonra ise öz yinelemeli fonksiyonların yapısı gereyi yapılan tüm işlemler adım adım geri alınıyor. Bu nedenle 7. satırdaki kod çalışmaya başlıyor.
Kısacası fonksiyonun içerisinde aynı fonksiyonun tekrar çağrılmasını sağlayan azalt(s[1:]
) kodu sayesinde kendini yineleyen fonksiyon, yineleme işlemi bittikten sonra azalt(s[1:])
kodundan sonraki satırı çalışıyor. Tabi bu esnada da yapılan işlemler bir anlamda geri alındığı (geri alınma kavramı belki tam oturmadı başka bir şey bulamadım) için print()
fonksiyonu sayesinde zamanı geri sarar gibi değişkenin adım adım eski halini tekrar görebiliyoruz.
“Gördüğünüz gibi fonksiyon özyineleme sürecine girerken düşürdüğü her bir karakteri, özyineleme sürecinden çıkarken yeniden döndürüyor. Bu, özyinelemeli fonksiyonların önemli bir özelliğidir.” ÖZGÜL, F.
Bu arada aşağıdaki bağlantıyı da incelemenizde fayda var. Kodlarınız okunaklı olursa buradaki bilgili arkadaşlar size daha çabuk destek olabilirler.