Karşılaştırma Tablosu
Karşılaştırma için temel | özyineleme | tekrarlama |
---|---|---|
Temel | Bir fonksiyon gövdesindeki ifade, fonksiyonun kendisini çağırır. | Talimat setinin tekrar tekrar yürütülmesine izin verir. |
Biçim | Özyinelemeli işlevde, yalnızca sonlandırma koşulu (temel durum) belirtilir. | İterasyon, başlatma, koşul, ifadenin döngü içinde çalıştırılmasını ve kontrol değişkenini güncelleme (artırma ve azaltma) işlemlerini içerir. |
Sonlandırma | Özyinelemeli çağrı yapılmadan geri dönmeye zorlamak için işlevin gövdesinde koşullu bir ifade bulunur. | Yineleme ifadesi, belirli bir koşul elde edilinceye kadar tekrar tekrar yürütülür. |
Şart | İşlev, (temel durum) olarak adlandırılan bazı koşullara yakınlaşmazsa, sonsuz özyinelemeye yol açar. | Yinelemeli ifadedeki kontrol koşulu hiçbir zaman yanlış olmazsa, sonsuz yinelemeye yol açar. |
Sonsuz tekrarlama | Sonsuz özyineleme sistemi çökertebilir. | Sonsuz döngü, art arda CPU döngülerini kullanır. |
Uygulamalı | Özyineleme her zaman işlevlere uygulanır. | Yineleme yineleme deyimlerine veya "döngüler" uygulanır. |
yığın | Yığın, işlev her çağrıldığında yeni yerel değişkenler ve parametreler kümesini depolamak için kullanılır. | Yığın kullanmaz. |
havai | Özyineleme, tekrarlanan işlev çağrılarının ek yüküne sahiptir. | Tekrarlanan işlev çağrısı ek yükü yok. |
hız | Yürütmede yavaş. | Yürütmede hızlı. |
Kodun Boyutu | Özyineleme, kodun boyutunu azaltır. | Yineleme kodu daha uzun yapar. |
Özyineleme tanımı
C ++, bir fonksiyonun kendi kodu dahilinde kendisini çağırmasını sağlar. Bu, fonksiyon tanımının kendisine bir fonksiyon çağrısına sahip olduğu anlamına gelir. Bazen “ dairesel tanım ” olarak da adlandırılır. Yerel değişkenler ve işlev tarafından kullanılan parametreler, işlev kendini çağırdığında ve yığının en üstünde depolandığında yeni oluşturulur. Ancak, bir işlev kendini her çağırdığında, bu işlevin yeni bir kopyasını oluşturmaz. Özyinelemeli işlev kodun boyutunu önemli ölçüde azaltmaz ve bellek kullanımını bile iyileştirmez, ancak yinelemeyle karşılaştırıldığında bazılarını yapar.
Özyinelemeyi sona erdirmek için, fonksiyonun tanımına bir özyinelemeli çağrı yapmadan geri dönmeye zorlamak için bir select ifadesi eklemelisiniz. Bir özyinelemeli işlev tanımında select deyiminin olmaması, bir kez çağrıldığında sonsuz özyinelemede işleve izin verecektir.
Numaranın faktörünü döndürecek bir fonksiyon ile özyinelemeyi anlayalım.
int faktorial (int num) {int cevap; eğer (num == 1) {dönüş 1; } else {answer = factorial (num-1) * num; // özyinelemeli çağrı} return (cevapla); }
Yukarıdaki kodda, diğer kısımdaki ifade, özeti içinde bulunduğu işlev faktörü () olarak adlandırdığından özyinelemeyi gösterir.
İterasyonun Tanımı
Yineleme, yineleme deyimindeki koşul yanlış oluncaya kadar komut kümesini art arda yürütme işlemidir. İteration deyimi, iteration deyimi içindeki deyimlerin başlatılması, karşılaştırılması, yürütülmesini ve son olarak kontrol değişkeninin güncellenmesini içerir. Kontrol değişkeni güncellendikten sonra tekrar karşılaştırılır ve yineleme ifadesindeki koşul yanlış olduğu ortaya çıkana kadar işlem kendini tekrar eder. Yineleme ifadeleri “for” döngüsü, “while” döngüsü, “do-while” döngüsüdür.
Yineleme ifadesi değişkenleri saklamak için bir yığın kullanmaz. Dolayısıyla, yineleme ifadesinin yürütülmesi özyinelemeli işlevle karşılaştırıldığında daha hızlıdır. Yineleme işlevi bile, yürütmesini özyinelemeli işlevden daha hızlı yapan yinelenen işlev çağrısı ek yüküne sahip değildir. Kontrol koşulu yanlış olduğunda yineleme sonlandırılır. Yineleme ifadesinde kontrol koşulunun olmaması sonsuz bir döngüye neden olabilir veya bir derleme hatasına neden olabilir.
Yukarıdaki örneğe ilişkin yinelemeyi anlayalım.
int faktorial (int num) {int answer = 1; // başlatılmadan önce bir çöp değeri içerebileceği için başlatılması gerekiyor (int t = 1; t> num; t ++) // iteration {answer = answer * (t); dönüş (cevap); }}
Yukarıdaki kodda, fonksiyon, iteration deyimini kullanarak sayının faktörünü döndürür.
Özyineleme ve İterasyon Arasındaki Temel Farklılıklar
- Özyineleme, bir programdaki bir yöntemin sürekli olarak kendisini çağırması, yinelemenin ise bir programdaki bir dizi komutun art arda yürütülmesidir.
- Bir özyinelemeli yöntem, bir dizi talimat, bir ifadenin kendisini ve bir sonlandırma koşulunu içerirken yineleme ifadeleri, bir döngü içindeki bir başlatma ve artış, koşul, bir talimat seti ve bir kontrol değişkeni içerir.
- Koşullu bir ifade, özyinelemenin sona ermesine ve kontrol değişkeninin değerinin yineleme ifadesinin sona ermesine karar vermesine karar verir.
- Eğer yöntem fesih koşuluna yol açmazsa, sonsuz özyinelemeye girer. Öte yandan, kontrol değişkeni hiçbir zaman sonlandırma değerine yol açmazsa, yineleme ifadesi sonsuz olarak yinelenir.
- Sonsuz özyineleme sistem çökmesine neden olurken, sonsuz yineleme CPU döngülerini tüketir.
- Özyineleme her zaman metoda uygulanır, yineleme ise komut setine uygulanır.
- Özyinleme sırasında oluşturulan değişkenler yığında depolanır, yineleme ise yığın gerektirmez.
- Özyineleme, yinelenen işlev çağrısının genel giderine neden olurken yineleme, genel gider çağrılan bir işleve sahip değildir.
- İşlev çağrısı ek yükü yinelemenin yürütülmesi nedeniyle yavaş, yinelemenin yürütülmesi daha hızlı olur.
- Özyineleme, kod boyutunu azaltırken yinelemeler kodu daha uzun yapar.
Sonuç:
Özyinelemeli işlevi yazması kolaydır, ancak yinelemeyle karşılaştırıldığında iyi performans göstermezler; yinelemeyi yazması zordur ancak performans özyinelemeye göre iyidir.