Python Özyinelemeli İşlev Kavramı: Yeni Başlayanlar için Python Eğitimi
Yayınlanan: 2020-03-18Bilgisayar bilimi dünyasında özyineleme, bir şeyi kendi terimleriyle tanımlama tekniğini ifade eder. Başka bir deyişle, özyinelemeli bir işlev kendisini işleme için çağırır. Bu yazıda, 21. yüzyılın yaygın olarak kullanılan bir programlama dili olan Python'da özyinelemeli fonksiyon kavramını anlayacağız .
İçindekiler
Python Özyineleme nedir ?
Python'da, belirli bir görevi yerine getiren bir grup ilgili ifadeye 'fonksiyon' adı verilir. Bu nedenle, işlevler programınızı daha küçük parçalara böler. Ve bir fonksiyonun Python'da diğer fonksiyonları çağırabileceği yaygın bir bilgidir.
Ancak diğer bazı işlevler kendilerini arayabilirler. Bunlar özyinelemeli işlevler olarak bilinir. Birbirine bakacak şekilde yerleştirilmiş iki paralel ayna düşünün. Şimdi, aynalar arasında tutulan herhangi bir nesne özyinelemeli olarak yansıtılacaktır.
Çalışmasını net bir şekilde anlamak için özyinelemeli fonksiyon hakkında ayrıntılara girelim.
Özyinelemeli İşlev
Python'da özyinelemeli bir fonksiyonun, kendini referanslı ifadelerle tanımlandığı gibi, yani kendisi açısından çağırdığını biliyoruz . Bir değer veya sonuç döndürmek için belirli bir koşul karşılanana kadar davranışını tekrarlamaya devam eder. Şimdi nasıl çalıştığını öğrenmek için bir örneğe bakalım.
Ayrıca okuyun: Python Mülakat Soruları ve Cevapları
Bir tamsayının faktöriyelini bulmak istediğinizi varsayalım. Faktöriyel, 1'den bu tam sayıya kadar olan tüm sayıların çarpımından başka bir şey değildir. Örneğin, 5'in faktöriyeli (5 olarak yazılır!) 1*2*3*4*5*6, yani 720 olur. Aşağıdaki gibi tanımlanan özyinelemeli bir calc_factorial(x) fonksiyonumuz var:
def calc_factorial(x):
#Bir tamsayının faktöriyelini bulmak için özyinelemeli işlev
x == 1: ise
dönüş 1
Başka
dönüş (x * calc_factorial(x-1))
Bu işlevi 4 gibi pozitif bir tamsayı ile çağırırsanız ne olur? Temel duruma ulaşana kadar (sayı 1'e düştüğünde) her işlev çağrısı bir yığın çerçevesi ekleyecektir. Temel koşul, özyinelemenin bitmesi ve süresiz olarak devam etmemesi için gereklidir. Dolayısıyla, verilen durumda dördüncü çağrıdan sonra 24 değeri döndürülecektir.
Python'da Recursive Fonksiyonun Uygulanması
Python'da özyinelemeli işlevlerin çeşitli uygulamaları olabilir. Örneğin, bir Koch kar tanesi gibi tekrarlanan bir desene sahip bir grafik yapmak istiyorsunuz. Özyineleme, aynı tasarımın daha küçük versiyonlarından oluşan fraktal desenler oluşturmak için kullanılabilir.
Bir başka örnek de oyun çözmedir. Sudoku ve çok sayıda karmaşık oyunu çözmek için özyinelemeli algoritmalar yazabilirsiniz. Özyineleme en yaygın olarak arama, sıralama ve geçiş problemlerinde kullanılır.
İşlevin çarpıcı bir özelliği, özyinelemeli uygulamanın geri izlemeye izin vermesidir. Dolayısıyla özyineleme, aşamalı olarak bir çözüm oluşturmak ve herhangi bir aşamada problem kısıtlamalarını karşılamayan bu çözümleri kaldırmakla ilgilidir. Bunu başarmak için iki şey gereklidir - durumu korumak ve uygun veri yapısını. Bu terimlere aşina olmak için okumaya devam edin.
Okuyun: Hindistan'da Python Geliştirici Maaşı
Devleti korumak
Python'daki her özyinelemeli çağrının kendi yürütme bağlamı vardır. Python'da özyinelemeli işlevlerle uğraşırken, durumu her özyinelemeli çağrıdan geçirmeniz gerekir. Bununla, mevcut durum, mevcut çağrının yürütme bağlamının bir parçası haline gelir. Durumu global kapsamda da tutabilirsiniz.
Örneğin, 1+2+3+4+…….+10'u hesaplamak için özyineleme kullanıyorsanız. Burada eklediğiniz mevcut sayı ve o noktaya kadar biriken toplam, korumanız gereken durumu oluşturur. Durumun korunması, güncellenmiş mevcut durumun her çağrı boyunca argümanlar olarak iletilmesini içerir. İşte bunu nasıl yapabileceğiniz.
def toplam_sayılar(geçerli_sayı, birikmiş_toplam)
#Temel durum
#dönüş son durumu
mevcut sayı==11 ise:
birikmiş_sum döndür
#özyinelemeli durum
#Durumu özyinelemeli çağrı ile işleyin
Başka:
toplam_sayıyı döndür(geçerli_sayı + 1, birikmiş_sum + geçerli_sayı)

Alternatif olarak, global değişken durumunu kullanabilirsiniz. Bu yöntemi kullanarak durumu korumak için durumu global kapsamda tutarsınız.
geçerli_sayı = 1
birikmiş_sum = 0
def toplam_sayılar():
küresel akım_sayısı
küresel birikmiş_sum
#Temel durum
eğer geçerli_sayı==11
birikmiş_sum döndür
#özyinelemeli durum
Başka:
birikmiş_sum = birikmiş_sum + geçerli_sayı
geçerli_sayı = geçerli_sayı + 1
toplam_sayıları döndür()
Özyinelemeli Veri Yapıları
Bir veri yapısı, kendisinin daha küçük ve daha basit versiyonları olarak tanımlanabiliyorsa, özyinelemeli olarak kabul edilir. Özyinelemeli veri yapılarına örnek olarak listeler, ağaçlar, hiyerarşik yapılar, sözlükler vb. dahildir. Bir liste, öğe olarak başka listelere sahip olabilir. Bir ağacın alt ağaçları, yaprak düğümleri vb.
Burada özyinelemeli fonksiyonların yapısının genellikle girdi olarak aldığı veri yapılarından sonra modellendiğini belirtmek önemlidir. Dolayısıyla özyinelemeli veri yapıları ve özyinelemeli işlevler el ele gider.
Fibonacci Hesaplamasında Özyineleme
İtalyan matematikçi Fibonacci, tavşanların nüfus artışını modellemek için ilk olarak 13. yüzyılda Fibonacci sayılarını tanımladı. İlk yıldaki bir çift tavşandan başlayarak, belirli bir yılda doğan tavşan çiftlerinin sayısının, son iki yılda doğan tavşan çiftlerinin sayısına eşit olduğu sonucuna varmıştır. Bu şu şekilde yazılabilir: Fn = Fn-1 + Fn-2 (Temel durumlar: F0=1 ve F1=1).
Fibonacci sayısını hesaplamak için özyinelemeli bir işlev yazdığınızda, saf özyineleme ile sonuçlanabilir. Bu, özyinelemeli işlevin tanımı saf bir şekilde takip edildiğinde ve gereksiz yere değerleri yeniden hesapladığınızda olur. Yeniden hesaplamayı önlemek için işleve lru_cache dekoratörü uygulayabilirsiniz. Sonuçları önbelleğe alır ve süreci verimsiz olmaktan kurtarır.
Devamını oku: Her Python Geliştiricisinin Bilmesi Gereken En İyi 10 Python Aracı
Özyinelemeli Artıları ve Eksileri
Özyineleme, karmaşık bir görevi alt problemlere bölerek basitleştirmeye yardımcı olur. Özyinelemeli işlevler, daha temiz kod ve ayrıca karmaşık olmayan dizi oluşturma yapar. Ancak özyineleme, sınırlamaları olmadan gelmez. Bazen aramalar, çok fazla zaman ve bellek kullandıkları için pahalı ve verimsiz olabilir. Özyinelemeli işlevlerin hatalarını ayıklamak da zor olabilir.
Toplama
Bu yazıda Python özyineleme kavramını ele aldık , bazı örnekler kullanarak gösterdik ve ayrıca bazı avantaj ve dezavantajlarını tartıştık. Tüm bu bilgilerle, bir sonraki Python röportajınızda özyinelemeli işlevleri kolayca açıklayabilirsiniz!
Veri bilimi hakkında bilgi edinmek istiyorsanız, çalışan profesyoneller için oluşturulan ve 10'dan fazla vaka çalışması ve proje, uygulamalı uygulamalı atölye çalışmaları, endüstri uzmanlarıyla mentorluk sunan IIIT-B & upGrad'ın Veri Biliminde PG Diplomasına göz atın, 1- endüstri danışmanlarıyla bire bir, en iyi firmalarla 400+ saat öğrenim ve iş yardımı.
Özyineleme neden bu kadar önemli?
Eğer bir programcıysanız, özyinelemeli düşünmeniz çok önemlidir. Bunun nedeni, özyinelemeli işlevlerin karmaşık bir programı daha küçük bir programa bölmenize yardımcı olmasıdır. Ayrıca özyinelemeli çözümlerin, yinelemeli çözümlere kıyasla okunmasının çok daha kolay olduğunu fark edeceksiniz.
Belirli programların çalışması için çok büyük miktarda alan ve kod satırları kapladığını sık sık göreceksiniz. Bu programların özyinelemeli bir işlev eklenerek basitleştirilebileceği ve gerektiğinde işlevin tekrar tekrar çağrılabileceği birkaç senaryo vardır. Böylece, fazladan kod satırı yazmanıza gerek kalmayacak ve iş de etkili bir şekilde tamamlanmış olacaktır.
Özyineleme uygulamaları nelerdir?
Hem hesaplama işlevlerinde hem de gerçek hayatta görülen birçok pratik özyineleme uygulaması vardır. Özyineleme kullanmadan, bir sayının palindrom olup olmadığını belirlemek, bir tür fraktal çizmek ve çok daha fazlası için Fibonacci dizisi, Ackermann işlevi gibi belirli matematik işlevlerini ifade etmek mümkün değildir.
Bu matematik işlevleri aracılığıyla oluşturulmuş birkaç yazılım ve uygulama vardır. Örneğin, Candy Crush, bu matematik işlevlerini ve özyinelemeyi bir karo kombinasyonu oluşturmak için kullanır. Bunun dışında satranç da özyineleme uygulamasının klasik bir örneğidir. Bugün kullandığımız arama algoritmalarının çoğu özyinelemeyi de kullanır.
Özyinelemenin temel kuralları nelerdir?
Özyinelemeli fonksiyonlar, karmaşık bir problemi farklı küçük adımlarla basitleştirerek çözmek için kendilerini arayabilen fonksiyonlardır. Özyinelemenin dört temel kuralı vardır. Özyineleme yardımı olmadan çözülebilecek bir temel durum olmalıdır. Özyinelemeli olarak çözülmesi gereken her durum, her zaman temel duruma doğru ilerleme kaydetmelidir. Tüm özyinelemeli çağrıların işe yaradığını varsaymak için tasarım kuralında tümevarım yoluyla ispatı kullanın. Sorunun aynı örneğini çözmek için asla ayrı özyinelemeli çağrılar kullanmamalısınız. Bunun yerine, dinamik programlama ile gitmelisiniz.