Yinelemeli algoritma: açıklama, analiz, özellikler ve örnekler

İçindekiler:

Yinelemeli algoritma: açıklama, analiz, özellikler ve örnekler
Yinelemeli algoritma: açıklama, analiz, özellikler ve örnekler
Anonim

Modern özyineleme anlayışı: işlevselliğin tanımı ve ona dışarıdan ve bu işlevsellikten erişim. Özyinelemenin matematikçiler tarafından doğduğuna inanılıyor: faktöriyel hesaplama, sonsuz seriler, fraktallar, sürekli kesirler … Ancak yineleme her yerde bulunabilir. Nesnel doğa yasaları, özyinelemeyi ana algoritmaları ve ifade (varoluş) biçimi olarak maddi dünyanın nesnelerinin çoğu olarak değil, genel olarak hareketin ana algoritması olarak “göz önünde bulundurur”.

özyinelemeli algoritma
özyinelemeli algoritma

Bilim ve teknolojinin çeşitli alanlarında çeşitli uzmanlıklara sahip kişiler, "x ~/=f (x)" olduğu özyinelemeli f (x) algoritmasını kullanır. Kendini çağıran bir fonksiyon güçlü bir çözümdür ancak bu çözümü oluşturmak ve anlamak çoğu durumda çok zor bir iştir.

Eski zamanlarda saray alanını artırmak için özyineleme kullanılırdı. Birbirine yönlendirilmiş bir ayna sistemi aracılığıyla, çarpıcı üç boyutlu uzamsal efektler yaratabilirsiniz. Ama nasıl olduğunu anlamak o kadar kolay mı?bu aynaları ayarla? Birkaç aynadan yansıyan bir noktanın uzayda nerede olduğunu belirlemek daha da zordur.

Özyineleme, özyinelemeli algoritmalar: anlam ve sözdizimi

Bir dizi işlemin tekrar edilmesiyle formüle edilen problem özyinelemeli olarak çözülebilir. Basit bir algoritma (ikinci dereceden bir denklemi hesaplamak, bir web sayfasını bilgi ile doldurmak için bir komut dosyası, bir dosya okumak, bir mesaj göndermek…) özyineleme gerektirmez.

Yinelemeli bir çözüme izin veren algoritmanın temel farklılıkları:

  • birkaç kez çalıştırılması gereken bir algoritma var;
  • algoritma her seferinde değişen verilere ihtiyaç duyar;
  • algoritmanın her seferinde değişmesi gerekmez;
  • Son bir koşul var: algoritma özyinelemeli - sonsuz değil.

Genel olarak, bir özyineleme nedeninin olmaması için bir kerelik yürütmenin gerekli bir koşul olduğu iddia edilemez. Ayrıca zorunlu bir son koşul da isteyemezsiniz: sonsuz özyinelemelerin kendi kapsamı vardır.

Algoritma özyinelemelidir: her seferinde değişen ve her seferinde yeni bir sonuç veren veriler üzerinde bir dizi işlem art arda gerçekleştirildiğinde.

Yineleme formülü

Özyinelemenin matematiksel anlayışı ve programlamadaki analogu farklıdır. Matematik, programlamanın işaretleri olmasına rağmen, programlama çok daha yüksek bir matematiktir.

özyinelemeli algoritma f
özyinelemeli algoritma f

İyi yazılmış bir algoritma, yazarının zekasının aynası gibidir. Genelprogramlamadaki özyineleme formülü "f(x)" dir, burada "x ~/=f(x)" en az iki yoruma sahiptir. Burada "~" sonucun benzerliği veya yokluğu, "=" ise işlevin sonucunun varlığıdır.

İlk seçenek: veri dinamiği.

  • function "f(x)" özyinelemeli ve değişmez bir algoritmaya sahiptir;
  • "x" ve "f(x)" sonucu her seferinde yeni değerlere sahiptir, "f(x)" sonucu bu fonksiyonun yeni "x" parametresidir.

İkinci seçenek: kod dinamiği.

  • function "f(x)", verileri iyileştiren (analiz eden) çeşitli algoritmalara sahiptir;
  • veri analizi - kodun bir kısmı ve istenen eylemi gerçekleştiren özyinelemeli algoritmaların uygulanması - kodun ikinci kısmı;
  • "f(x)" fonksiyonunun sonucu değildir.

Sonuç olmaması normaldir. Programlama matematik değildir, burada sonucun açıkça mevcut olması gerekmez. Özyinelemeli bir işlev, siteleri kolayca ayrıştırabilir ve veritabanını doldurabilir veya gelen girdiye göre nesneleri başlatabilir.

Veri ve özyineleme

Programlama özyinelemeli algoritmalar, fonksiyonun birden fazla veya daha az olan belirli bir değeri her aldığında bir faktöriyel hesaplamakla ilgili değildir - uygulama seçeneği geliştiricinin tercihine bağlıdır.

Faktoriyelin "8!" nasıl olduğu önemli değil,bu formülü kesinlikle takip eden algoritma.

İşleme bilgisi, tamamen farklı bir düzenin "matematik"idir. Buradaki özyinelemeli işlevler ve algoritmalar harfler, kelimeler, deyimler, cümleler ve paragraflar üzerinde çalışır. Sonraki her seviye bir öncekini kullanır.

Giriş veri akışı çok çeşitli koşullar üzerinde analiz edilir, ancak analiz süreci genellikle özyinelemelidir. Giriş akışının tüm varyantları için benzersiz algoritmalar yazmanın bir anlamı yoktur. Tek bir işlev olmalıdır. Burada, özyinelemeli algoritmalar, girdi için yeterli olan bir çıktı akımının nasıl oluşturulacağına dair örneklerdir. Bu özyinelemeli algoritmanın çıktısı değildir, ancak istenen ve gerekli çözümdür.

Soyutlama, özyineleme ve OOP

Nesne yönelimli programlama (OOP) ve özyineleme temelde farklı varlıklardır, ancak birbirlerini mükemmel şekilde tamamlarlar. Soyutlamanın özyineleme ile hiçbir ilgisi yoktur, ancak OOP'nin merceği aracılığıyla bağlamsal özyinelemeyi uygulama olasılığını yaratır.

Örneğin, bilgiler ayrıştırılıyor ve harfler, kelimeler, deyimler, cümleler ve paragraflar ayrı ayrı vurgulanıyor. Açıkçası, geliştirici bu beş türden nesnelerin örneklerinin oluşturulmasını sağlayacak ve her düzeyde özyinelemeli algoritmalar için bir çözüm sunacaktır.

özyinelemeli algoritmaları programlama
özyinelemeli algoritmaları programlama

Bu arada, eğer harfler düzeyinde “anlam aramanın bir anlamı yoksa”, o zaman anlambilim, kelimeler düzeyinde ortaya çıkar. Kelimeleri fiillere, isimlere, zarflara, edatlara bölebilirsiniz… Daha ileri gidebilir ve vakaları tanımlayabilirsiniz.

Cümle düzeyinde, anlambilim noktalama işaretleri ve mantıkla desteklenirkelime kombinasyonları. Cümle düzeyinde daha mükemmel bir anlam düzeyi bulunur ve bir paragraf tam bir düşünce olarak kabul edilebilir.

Nesneye dayalı geliştirme, özelliklerin ve yöntemlerin mirasını önceden belirler ve tamamen soyut bir ata oluşturulmasıyla nesneler hiyerarşisini başlatmayı önerir. Aynı zamanda, şüphesiz, her bir neslin analizi özyinelemeli olacak ve teknik düzeyde birçok pozisyonda (harfler, kelimeler, deyimler ve cümleler) çok fazla farklılık göstermeyecektir. Paragraflar, eksiksiz düşünceler gibi, bu listeden öne çıkabilir, ancak bunlar esas değildir.

Algoritmanın ezici bölümünün soyut ata düzeyinde formüle edilebilmesi, soyut düzeyden çağrılan veri ve yöntemlerle her bir soyundan gelen düzeyinde rafine edilmesi önemlidir. Bu bağlamda soyutlama, özyineleme için yeni ufuklar açar.

OOP'ın tarihsel özellikleri

OOP, yazılım dünyasına iki kez geldi, ancak bazı uzmanlar bulut bilişimin ortaya çıkışını ve nesneler ve sınıflar hakkındaki modern fikirleri BT teknolojilerinin geliştirilmesinde yeni bir tur olarak nitelendirebilir.

Modern OOP bağlamında "nesne" ve "objektif" terimleri genellikle geçen yüzyılın 50'li ve 60'lı yıllarına atfedilir, ancak 1965 ve Simula, Lisp, Algol, Smalltalk'ın ortaya çıkışı ile ilişkilendirilirler..

O günlerde programlama özellikle geliştirilmedi ve devrim niteliğindeki kavramlara yeterince cevap veremiyordu. Fikirlerin ve programlama stillerinin (C/C++ ve Pascal - çoğunlukla) mücadelesi hala çok uzaktaydı ve veritabanları hala kavramsal olarak oluşturulmuştu.

özyineleme özyinelemeli algoritmalar
özyineleme özyinelemeli algoritmalar

80'lerin sonlarında ve 90'ların başında, Pascal'da nesneler ortaya çıktı ve herkes C / C ++ sınıflarını hatırladı - bu, OOP'de yeni bir ilgi alanı yarattı ve o zaman, başta programlama dilleri olmak üzere araçlar, artık kullanılamaz hale geldi. yalnızca nesne yönelimli fikirleri destekleyin, ancak buna göre geliştirin.

Elbette, daha önceki özyinelemeli algoritmalar yalnızca programın genel kodunda kullanılan işlevler olsaydı, şimdi özyineleme bir nesnenin (sınıfın) özelliklerinin bir parçası haline gelebilir ve bu da kalıtım bağlamında ilginç fırsatlar sağlar.

Modern OOP'nin özelliği

OOP'nin geliştirilmesi, başlangıçta nesneleri (sınıfları) veri ve özellik (yöntem) koleksiyonları olarak ilan etti. Aslında sözdizimi ve anlamı olan verilerle ilgiliydi. Ancak o zaman OOP'yi gerçek nesneleri yönetmek için bir araç olarak sunmak mümkün değildi.

özyinelemeli fonksiyonlar ve algoritmalar
özyinelemeli fonksiyonlar ve algoritmalar

OOP, "bilgisayar doğası" nesnelerini yönetmek için bir araç haline geldi. Bir komut dosyası, bir düğme, bir menü öğesi, bir menü çubuğu, bir tarayıcı penceresindeki bir etiket bir nesnedir. Ama bir makine, bir gıda ürünü, bir kelime veya bir cümle değil. Gerçek nesneler, nesne yönelimli programlamanın dışında kaldı ve bilgisayar araçları yeni bir enkarnasyon aldı.

Popüler programlama dillerindeki farklılıklar nedeniyle, OOP'nin birçok lehçesi ortaya çıkmıştır. Anlambilim açısından, pratik olarak eşdeğerdirler ve uygulanan alana değil, araçsal alana odaklanmaları, gerçek nesnelerin tanımını ötesine taşımayı mümkün kılar.algoritmalar ve platformlar arası ve diller arası "varoluşlarını" sağlamak.

Yığınlar ve işlev çağrısı mekanizmaları

Çağrı fonksiyonları (prosedürler, algoritmalar) için mekanizmalar, veri (parametreler) geçirmeyi, bir sonuç döndürmeyi ve fonksiyon (prosedür) tamamlandıktan sonra kontrolü alması gereken operatörün adresini hatırlamayı gerektirir.

özyinelemeli algoritma örnekleri
özyinelemeli algoritma örnekleri

Genellikle, yığın bu amaç için kullanılır, ancak programlama dilleri veya geliştiricinin kendisi kontrolü aktarmak için çeşitli seçenekler sağlayabilir. Modern programlama, bir işlevin adının yalnızca bir parametre olamayacağını kabul eder: algoritmanın yürütülmesi sırasında oluşturulabilir. Başka bir algoritma yürütülürken de bir algoritma oluşturulabilir.

Yinelemeli algoritmalar kavramı, adları ve gövdeleri görevin oluşturulması sırasında (istenen algoritmanın seçilmesi) belirlenebildiğinde, özyinelemeyi yalnızca bir şeyin nasıl yapılacağını değil, aynı zamanda tam olarak kimin yapması gerektiğini de genişletir. yap. "Anlamlı" adıyla bir algoritma seçmek umut verici, ancak zorluklar yaratıyor.

Bir dizi fonksiyonda özyineleme

Bir algoritmanın kendini çağırdığında özyinelemeli olduğunu söyleyemezsiniz ve hepsi bu. Programlama bir dogma değildir ve özyineleme kavramı, kendinizi kendi algoritmanızın gövdesinden çağırmanız için özel bir gereklilik değildir.

Pratik uygulamalar her zaman temiz bir çözüm sunmaz. Çoğu zaman, ilk veriler hazırlanmalı ve özyinelemeli çağrının sonucu, problemin tamamı (tüm algoritma) bağlamında analiz edilmelidir.genel.

Aslında, yalnızca özyinelemeli bir işlev çağrılmadan önce değil, tamamlandıktan sonra da başka bir program çağrılabilir veya çağrılmalıdır. Çağrıyla ilgili özel bir sorun yoksa: özyinelemeli işlev A(), bir şey yapan ve A()'yı çağıran B() işlevini çağırır, o zaman hemen kontrolün geri dönüşüyle ilgili bir sorun vardır. Özyinelemeli çağrıyı tamamladıktan sonra, A() fonksiyonu, onu tekrar çağıracak olan B()'yi yeniden çağırmak için kontrolü almalıdır. Denetimi yığında olması gerektiği gibi B()'ye geri döndürmek yanlış çözümdür.

Programcı, parametre seçiminde sınırlı değildir ve bunları fonksiyon adlarıyla tamamlayabilir. Başka bir deyişle, ideal çözüm, B()'nin adını A()'ya geçirmek ve A()'nın kendisinin B()'yi aramasına izin vermektir. Bu durumda, geri dönüş kontrolü ile ilgili herhangi bir sorun olmayacak ve özyinelemeli algoritmanın uygulanması daha şeffaf olacaktır.

Anlama ve özyineleme düzeyi

Yinelemeli algoritmalar geliştirmenin sorunu, sürecin dinamiklerini anlamanız gerektiğidir. Nesne yöntemlerinde özyinelemeyi, özellikle soyut bir ata düzeyinde kullanırken, yürütme süresi bağlamında kendi algoritmanızı anlamada bir sorun vardır.

özyinelemeli algoritmaları çözme
özyinelemeli algoritmaları çözme

Şu anda, çağrı mekanizmalarında işlevlerin yuvalama düzeyi ve yığın kapasitesi üzerinde herhangi bir kısıtlama yoktur, ancak anlama sorunu vardır: hangi zaman noktasında genel algoritmada hangi veri düzeyinin veya hangi yerin özyinelemeli olarak adlandırıldığı işlevi ve kendisini kaç kez aradığı.

Mevcut hata ayıklama araçları genellikle güçsüzdürprogramcıya doğru çözümü söyleyin.

Döngüler ve özyineleme

Döngüsel yürütmenin özyinelemeye eşdeğer olduğu kabul edilir. Gerçekten de, bazı durumlarda, özyinelemeli algoritma, koşullu ve döngüsel yapıların sözdiziminde uygulanabilir.

Ancak, belirli bir işlevin özyinelemeli bir algoritma aracılığıyla uygulanması gerektiğine dair net bir anlayış varsa, döngü veya koşullu ifadelerin herhangi bir harici kullanımından vazgeçilmelidir.

özyinelemeli algoritmaların uygulanması
özyinelemeli algoritmaların uygulanması

Buradaki anlam, kendini kullanan bir fonksiyon şeklinde özyinelemeli bir çözümün eksiksiz, işlevsel olarak eksiksiz bir algoritma olacağıdır. Bu algoritma, programcının algoritmanın dinamiklerini anlayarak çaba sarf ederek oluşturmasını gerektirecektir, ancak harici kontrol gerektirmeyen nihai çözüm olacaktır.

Harici koşullu ve döngüsel operatörlerin herhangi bir kombinasyonu, özyinelemeli algoritmayı eksiksiz bir işlev olarak göstermemize izin vermez.

Yineleme Konsensüsü ve OOP

Bir özyinelemeli algoritma geliştirmenin hemen hemen tüm türevlerinde, iki algoritma geliştirmek için bir plan ortaya çıkar. İlk algoritma gelecekteki nesnelerin (örneklerin) bir listesini oluşturur ve ikinci algoritma aslında özyinelemeli bir işlevdir.

En iyi çözüm, özyinelemeyi, özyinelemeli algoritmayı içeren tek bir özellik (yöntem) olarak düzenlemek ve tüm hazırlık çalışmalarını nesne yapıcısına koymak olacaktır.

Bir özyinelemeli algoritma yalnızca çalıştığında doğru çözüm olacaktırharici kontrol ve yönetim olmaksızın sadece kendi başına. Harici bir algoritma sadece çalışmak için bir sinyal verebilir. Bu çalışmanın sonucu, harici destek olmadan beklenen çözüm olmalıdır.

Yineleme her zaman tam bir bağımsız çözüm olmalıdır.

Sezgisel anlayış ve işlevsel bütünlük

Nesne yönelimli programlama fiili standart haline geldiğinde, etkili bir şekilde kodlama yapabilmek için kendi düşüncenizi değiştirmeniz gerektiği aşikar hale geldi. Programcı, algoritmanın yürütülmesi sırasında dilin sözdiziminden ve anlambiliminden anlambilimin dinamiklerine geçmelidir.

Özyinelemenin özelliği: her şeye uygulanabilir:

  • web kazıma;
  • arama işlemleri;
  • metin bilgilerini ayrıştırma;
  • MS Word belgelerini okuma veya oluşturma;
  • etiketleri örnekleme veya analiz etme…

OOP'nin Özelliği: özyinelemeli bir algoritmayı soyut bir ata düzeyinde tanımlamayı mümkün kılar, ancak her biri kendi veri ve özellik paletine sahip olan benzersiz torunlara atıfta bulunmasını sağlar.

özyinelemeli algoritmalar kavramı
özyinelemeli algoritmalar kavramı

Özyineleme, algoritmasının işlevsel bütünlüğünü gerektirdiği için idealdir. OOP, tüm benzersiz çocuklara erişim sağlayarak özyinelemeli bir algoritmanın performansını iyileştirir.

Önerilen: