0Pricing
C Academy · Ders

Özyineleme ve Yineleme

Her birini ne zaman seçeceğinizi öğrenin.

Özyineleme ve Yineleme, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

Tekrarlamanın İki Yolu

Birçok problem özyineleme veya yineleme kullanılarak çözülebilir. Yineleme döngüleri, özyineleme ise işlev çağrılarını kullanır.

İkisi de aynı sonucu üretebilir; ancak biçim, bellek kullanımı ve hız bakımından farklıdır.

Döngüyle Faktöriyel

Burada faktöriyel, bir döngü kullanılarak yinelemeli biçimde yazılmıştır. Hiçbir işlev kendisini çağırmaz; tek bir değişken çarpımı biriktirir.

#include <stdio.h>

long factorial(int n) {
    long result = 1;
    for (int i = 2; i <= n; i++)
        result *= i;
    return result;
}

int main(void) {
    printf("%ld\n", factorial(6));
    return 0;
}

Özyinelemeyle Faktöriyel

Özyinelemeli sürüm daha kısadır ve matematiksel tanımı doğrudan yansıtır.

Her ikisi de faktöriyel(6) için 720 yazdırır; ancak farklı mekanizmalar kullanır.

long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

Bellek Farkları

Yineleme genellikle sabit ve küçük miktarda bellek kullanır: yalnızca birkaç yerel değişken.

Özyineleme her çağrı için bir yığın çerçevesi ekler; bu nedenle derin özyineleme daha fazla bellek kullanır ve yığın alanını tüketebilir.

Hız Farkları

Her özyinelemeli çağrının küçük bir maliyeti vardır: bir çerçeve oluşturmak ve bu çerçeveden dönmek.

Basit sayma görevlerinde döngüler, bu çağrı ek yükünü önledikleri için genellikle biraz daha hızlıdır.

Özyinelemenin Üstün Olduğu Durumlar

Problem ağaçlar, iç içe yapılar veya böl ve yönet algoritmaları gibi doğal olarak özyinelemeliyse özyineleme çok işe yarar.

Bu durumlarda özyinelemeli kod, elle yönetilen yığın kullanan eşdeğer döngüden daha kısa ve anlaşılırdır.

Yinelemenin Üstün Olduğu Durumlar

Dizi toplamak veya saymak gibi basit, doğrusal tekrarlarda döngü daha kolaydır ve sabit bellek kullanır.

Ayrıca büyük girdilerde yığın taşması riskini ortadan kaldırır.

int sum_array(int a[], int n) {
    int total = 0;
    for (int i = 0; i < n; i++)
        total += a[i];
    return total;
}

Aynı Görev, İki Biçim

1'den n'e kadar olan toplam her iki yolla da hesaplanabilir. Aşağıda, özyinelemeyle aynı yanıtı döndüren yinelemeli sürüm yer alır.

#include <stdio.h>

int sum_to(int n) {
    int total = 0;
    for (int i = 1; i <= n; i++)
        total += i;
    return total;
}

int main(void) {
    printf("%d\n", sum_to(100));
    return 0;
}

Özyinelemeyi Döngüye Dönüştürme

Her özyineleme, bazen kendi açık yığınınızı kullanarak yinelemeye dönüştürülebilir.

Faktöriyel veya toplam gibi basit doğrusal özyinelemeler, biriktirici değişkeni olan sıradan bir döngüye dönüştürülebilir.

#include <stdio.h>

int main(void) {
    int n = 5, result = 1;
    while (n > 1) { result *= n; n--; }
    printf("%d\n", result);
    return 0;
}

Kuyruk Özyinelemesi Üzerine Not

Kuyruk özyinelemeli bir çağrı, bir işlevdeki son eylemdir. Bazı derleyiciler bunu tek bir çerçeveyi yeniden kullanarak döngüye dönüştürür.

C bunu garanti etmez; bu nedenle derin özyineleme için buna güvenmeyiniz.

int sum_tail(int n, int acc) {
    if (n == 0) return acc;
    return sum_tail(n - 1, acc + n);
}

Bir Yaklaşım Seçme

Şunu sorunuz: Problem doğal olarak iç içe mi veya böl ve yönet yapısında mı? Öyleyse özyineleme uygundur.

Basit, doğrusal bir tekrarlama ve muhtemelen çok büyük bir girdi mi söz konusu? O hâlde yineleme daha güvenlidir ve çoğu zaman daha hızlıdır.

Kısa Kontrol

İki yaklaşımı karşılaştırınız.

Özet

Özyineleme ve yineleme aynı problemleri çözebilir. Döngüler sabit bellek kullanır ve doğrusal görevler için uygundur; özyineleme iç içe ve böl ve yönet problemlerinde daha anlaşılırdır, ancak her çağrı için bir yığın çerçevesinin maliyetini getirir.

Sıkça Sorulan Sorular

“Özyineleme ve Yineleme” dersi ücretsiz mi?

Evet — “Özyineleme ve Yineleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“Özyineleme ve Yineleme” dersinde ne öğreneceğim?

Her birini ne zaman seçeceğinizi öğrenin. C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Özyineleme ve Yineleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Özyineleme Nasıl Çalışır
  2. Klasik Özyinelemeli Problemler
  3. Özyineleme ve Yineleme
  4. Yığın Taşmasını Önleme
← C Academy Sayfasına Dön