CodeBlanks Logo Icon CodeBlanks

Fold ve recursion

fold ve özyineleme ile fonksiyonel desen öğrenirsin.

fold ile accumulate

fold, bir koleksiyonu bir başlangıç değeriyle accumulator'a dönüştürür. Her öğe için bir lambda çağrılır; lambda accumulator'ı günceller.

Örnek: val sum = listOf(1, 2, 3, 4).fold(0) { acc, n -> acc + n }. Bu, 0 + 1 + 2 + 3 + 4 = 10 sonucunu verir. fold, listeyi tek bir değere indirger; reduce'dan farkı bir başlangıç değeri almasıdır. Boş liste için reduce hata verirken fold başlangıç değerini döndürür.

Recursion ile faktöriyel

Recursion, bir fonksiyonun kendini çağırmasıdır. Fonksiyonel programlamada döngüler yerine sık kullanılır. Her recursif çağrı bir temel duruma (base case) yaklaşmalıdır.

Örnek: fun fact(n: Int): Long { if (n <= 1) return 1; return n * fact(n - 1) }. n <= 1 temel durumdur. fact(5), 5 * 4 * 3 * 2 * 1 = 120 döndürür. Derin recursif çağrılar stack taşmasına neden olabilir; bu yüzden tailrec kullanılır.

Uygulama fold ile liste toplamı

main içinde listOf(1, 2, 3, 4, 5).fold(0) { acc, n -> acc + n } sonucunu bir değişkene ata ve println ile yazdır.

Başlangıç kodu

Main.kt
// main'de 1..5 listesini fold ile topla
// sonucu println ile yazdır

Örnek çözüm

Main.kt
fun main() {
    val sum = listOf(1, 2, 3, 4, 5).fold(0) { acc, n ->
        acc + n
    }
    println(sum)
}

Beklenen çıktı

15

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 fold ve reduce arasındaki temel fark nedir?

  • fold sadece Int ile çalışır
  • reduce daha hızlıdır
  • fold bir başlangıç değeri alır Doğru cevap
  • fold yan etkili değildir

Açıklama: fold başlangıç değeri alır; reduce almaz.

2 fold ve recursion parçalarını eşle

Kavram Anlamı
fold(0) { acc, n -> } Accumulator
{ acc, n -> acc + n } Lambda
if (n <= 1) return 1 Temel durum
fact(n - 1) Recursif çağrı

3 fold çağrısını tamamla

Soru
val sum = listOf(1, 2, 3).____(0) { acc, n -> acc + n }
Cevap
val sum = listOf(1, 2, 3).fold(0) { acc, n -> acc + n }

Açıklama: fold başlangıç değeriyle accumulator döndürür.

İleri seviye bölümündeki tüm dersler