Özyineleme Temelleri
Coddy'nin C Journey'sinin Fundamentals bölümünün bir parçası — ders 50 / 63.
Özyineleme (Recursion), bir fonksiyonun bir problemi çözmek için kendisini çağırdığı bir tekniktir. Büyük bir problemi daha küçük, benzer problemlere bölerek çözmek gibidir.
Faktöriyel hesaplayan basit bir özyinelemeli (recursive) fonksiyona bakalım:
int factorial(int n) {
// Base case: factorial of 0 or 1 is 1
if (n <= 1) {
return 1;
}
// Recursive case: n! = n * (n-1)!
return n * factorial(n - 1);
}Her özyinelemeli fonksiyonun şunlara ihtiyacı vardır:
- Özyinelemeyi durdurmak için bir taban durum (base case)
- Taban duruma doğru ilerleyen bir özyinelemeli durum (recursive case)
Örneğin, factorial(3) hesaplanırken:
- factorial(3), factorial(2)'yi çağırır
- factorial(2), factorial(1)'i çağırır
- factorial(1), 1 döndürür (temel durum)
- factorial(2), 2 * 1 = 2 sonucunu döndürür
- factorial(3), 3 * 2 = 6 sonucunu döndürür
Görev
Kolay1'den n'e kadar olan sayıların toplamını hesaplamak için özyineleme (recursion) kullanan sumToN adında bir fonksiyon oluşturun.
Örneğin:
- sumToN(3) değeri 6 döndürmelidir (1 + 2 + 3)
- sumToN(5) değeri 15 döndürmelidir (1 + 2 + 3 + 4 + 5)
Fonksiyonunuz şunları yapmalıdır:
- n değeri 1 olduğunda bir temel durum (base case) kullanın (1 döndürün)
- Aksi takdirde, n artı 1'den (n-1)'e kadar olan sayıların toplamını döndürün
Kopya kağıdı
Özyineleme (Recursion), bir problemi daha küçük ve benzer problemlere bölerek çözmek için bir fonksiyonun kendisini çağırdığı bir tekniktir.
Her özyinelemeli fonksiyonun şunlara ihtiyacı vardır:
- Özyinelemeyi durdurmak için bir temel durum (base case)
- Temel duruma doğru ilerleyen bir özyinelemeli durum (recursive case)
Örnek - faktöriyel fonksiyonu:
int factorial(int n) {
// Temel durum: 0 veya 1'in faktöriyeli 1'dir
if (n <= 1) {
return 1;
}
// Özyinelemeli durum: n! = n * (n-1)!
return n * factorial(n - 1);
}factorial(3) nasıl çalışır:
- factorial(3), factorial(2)'yi çağırır
- factorial(2), factorial(1)'i çağırır
- factorial(1), 1 döndürür (temel durum)
- factorial(2), 2 * 1 = 2 döndürür
- factorial(3), 3 * 2 = 6 döndürür
Kendin dene
#include <stdio.h>
// sumToN fonksiyonunuzu buraya yazın
// main() fonksiyonunu değiştirmeyin
int main() {
int n;
scanf("%d", &n);
printf("%d", sumToN(n));
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Fundamentals bölümündeki tüm dersler
4Kontrol Akışı
If İfadesiIf - ElseElse-IfSwitch CaseTernary Koşul OperatörüÖzet Meydan Okumaİç İçe If - Else7Fonksiyonlar
Fonksiyon TanımlamaDönüş TürleriParametrelerTekrar Görevi #1Özyineleme TemelleriFonksiyon PrototipleriTekrar Görevi #22Değişkenler
Veri TipleriTam Sayı (Integer)Float - DoubleKarakterlerBooleanlarSabitlerprintf TemelleriDeğişken İsimlendirme KurallarıTip Dönüşümü Bölüm 1Tip Dönüşümü Bölüm 2Özet Meydan Okuması3Operatörler
Aritmetik OperatörlerModül OperatörüArtırma/AzaltmaAtama Operatörleriİlişkisel OperatörlerMantıksal Operatörler Bölüm 1Mantıksal Operatörler Bölüm 2Mantıksal Operatörler Bölüm 3Özet Meydan Okuması