Python'da özyinelemeli fonksiyonlar

Bu eğitimde göreceğiz Python'da örneklerle özyineleme. Programlamada özyineleme çok güçlü bir tekniktir, aynı kod çözüme ulaşana kadar birkaç kez tekrarlanacağı için kendisini çağıran, bir tür döngü gibi gören fonksiyonlarla yapılır.

Özyinelemeli bir işlevin sahip olması gereken özelliklerTemel durumBir noktada işlevi sonlandırmamıza izin verecek ve sonsuz çağrılar olmayacak.
özyinelemeli durumBu durumda fonksiyonu tekrar çağırırız ama çözüme daha da yaklaşacağız. Örneklerde daha iyi görünecektir.

NotTemel durum hakkında net olmak ve özyinelemeli durumun ona yaklaştığını ve sonsuz çağrı durumuna girmediğini bilmek önemlidir, özyineleme ile başlarken yaygın bir hatadır.

İyi bir şekilde özümsenmeleri için basit ve kısa olacak örneklere geçelim.

örnek 1 - Faktöriyel


Bu örnekte yapacağımız bir sayının faktöriyelini çözFaktöriyelin ne hakkında olduğunu bilmek istiyorsanız, bu bağlantıyı ziyaret edin. İşte kod ve aşağıda özyinelemeli işlevi açıklıyorum.
 def faktöriyel (sayı): if (sayı == 0 veya sayı == 1): 1 döndürürse: sayı döndürür * faktöriyel (sayı-1) if __name__ == "__main__": deneyin: num = int (girdi ("Kimden") Hangi sayının faktöriyelini bilmek istiyorsunuz? ")) if (num <0): print ("Sayı 0'dan büyük veya 0'a eşit olmalıdır ") else: print (" ", num" un faktöriyelidir ", faktöriyel (num )) hariç: print ("Bir sayı bekleniyor") 
Özyinelemeli işlevimiz, if'de temel duruma ve else'de özyinelemeli duruma sahiptir. Temel durumun 1 döndürdüğünü ve fonksiyona iletilen parametre 0 veya 1 olduğunda buna ulaşıldığını, bu duruma ulaşıldığında fonksiyonun tekrar çağrılmadığını görebilirsiniz. Özyinelemeli durumda, işlevin kendisine bir çağrımız var, ancak parametreyi 1 azaltmayı nasıl görebilirsiniz (temel duruma yaklaşıyoruz). Kodun fonksiyonun dışındaki son kısmı sadece kullanıcıdan bir sayı istemekten ve fonksiyonu çağırmak için 0'dan büyük veya eşit olup olmadığını kontrol etmekten sorumludur, çünkü negatif sayılarla faktöriyel çalışmaz.

4 numaralı yani faktöriyel (4) numaralı fonksiyona çağrı yaparsak aşağıdaki çağrıları yaparız:

 Çağrı 1: faktöriyel (4) Çağrı 2: 4 * faktöriyel (3) Çağrı 3: 3 * faktöriyel (2) Çağrı 4: 2 * faktöriyel (1)
1 ile faktoriyel çağrıldığında, daha fazla çağrı olmaz ve 1 döndürür, sonra bu fonksiyon benim çağırdığım fonksiyona sonuçları döndürür, dönüş şöyle olur:
 faktöriyel (1) = 1 faktöriyel (2) = 2 * 1 faktöriyel (3) = 3 * 2 faktöriyel (4) = 4 * 6
Ve sayıları çarptığımızda 24 olan sonucumuz zaten var: 1 * 2 * 3 * 4. Sonra 5'in faktöriyelini istediğimde ekran görüntüsü bırakıyorum ki bu 5'i 4'ün faktöriyeliyle (ki zaten 24 olduğunu biliyoruz) çarparak 120'yi vermekten başka bir şey değil. yanlış, bu:

Örnek 2 - Toplama çıkarma


Bu örnekte toplama veya çıkarma yapmak için özyinelemeli bir fonksiyon koydum, elbette bu örnek gerçek hayatta genellikle olmaz, ancak örnek olarak işe yarar:
 def çalıştırma (sayı1, sayı2): if (sayı2 == 0): sayı1 dönüş elif (sayı2 <0): dönüş çalıştırma (sayı1-1, sayı2 + 1) değilse: geri çalıştırma (sayı1 + 1, sayı2-1) eğer __name__ == "__main__": yazdır ("10 ve 3 ekleme", çalıştırma (10, 3)) yazdır ("5 ve -2 ekleme:", çalıştırma (5, -2)) 
Burada bir temel durum ve 2 özyinelemeli durum var, bu hangi yöne dokunacağımızı bilmektir, çünkü sayının pozitif mi yoksa negatif mi olduğuna bağlı olarak farklı davranmamız gerekecek. Çalıştırma işlevi 2 sayı alır ve algoritma, sayı2'ye bir çıkarma veya ekleme ve sayı1'e geçirme ile ilgilenir (sayı2 pozitifse, sayı2'den 1 çıkarır ve sayı1'e eklerim), böylece sayı2 değişkeni eşit olana kadar 0'a.

Örneğin aramaları görerek 3+2 ekleyeceğiz.

 Çağrı 1: Çalıştır (3,2) Çağrı 2: Çalıştır (4,1) Çağrı 3: Çalıştır (5,0)
Bu durumda, (5.0) işlemine başladığımızda yapacak başka bir şey yok, sonuca doğrudan sahibiz (çarpmayı yapmak zorunda olan faktöriyel durumundan farklı olarak). İşte kodu yürütmenin sonucu:

NotÖzyineleme ile zarif bir çözümümüz olmasına ve normalde daha kısa olmasına rağmen, başka seçeneğimiz olmadığında kullanılmalıdır, yinelemeli varyantını çekebilirsek, daha az bellek tükettiği ve genellikle daha hızlı olduğu için daha iyi bir seçim olacaktır.

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave