Menu
Coddy logo textTech

Özyinelemeli Fonksiyon: Faktöriyel

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 49 / 65.

Bir sayının faktöriyeli, özyinelemeyi (recursion) göstermek için mükemmel olan klasik bir matematiksel işlemdir. Pozitif bir n tam sayısının faktöriyeli (n! olarak yazılır), 1'den n'ye kadar olan tüm pozitif tam sayıların çarpımıdır. Örneğin, 5! = 5 × 4 × 3 × 2 × 1 = 120.

Faktöriyeli özyineleme (recursion) için ideal kılan şey, doğal olarak daha küçük ve özdeş problemlere bölünmesidir. 5! değerini hesaplamak için bunu 5 × 4! olarak düşünebilirsiniz. Ve 4! sadece 4 × 3!'dir ve bu böyle devam eder. Bu desen, 1'e eşit olan 1! değerine ulaşana kadar devam eder.

int factorial(int n) {
  if (n <= 1) {
    return 1; // Temel durum
  }
  
  return n * factorial(n - 1); // Özyinelemeli adım
}

Temel durum, n <= 1 olduğunda özyinelemeyi durdurur ve 1 döndürür. Özyinelemeli adım, mevcut sayıyı bir sonraki küçük sayının faktöriyeli ile çarpar. factorial(5) fonksiyonunu çağırdığınızda, 5 * factorial(4) döndürür, bu da 5 * 4 * factorial(3) döndürür ve temel duruma ulaşana kadar bu şekilde devam eder.

Bu yaklaşım, problemleri aynı problemin daha basit versiyonlarına indirgeyerek özyinelemenin (recursion) problemleri nasıl zarif bir şekilde çözdüğünü gösterir ve karmaşık hesaplamaların doğal ve sezgisel hissedilmesini sağlar.

challenge icon

Görev

Kolay

Özyineleme kullanarak birden fazla sayının faktöriyelini hesaplayan bir program oluştur. Programın, bir sayı listesini işleyip faktöriyellerini hesaplayarak özyinelemeli faktöriyel işlevini göstermeli.

  1. Virgüllerle ayrılmış sayıları içeren bir dize girdisi oku (ör. "3,5,0,7")
  2. Girdi dizesini tek tek sayılara ayır ve her birini bir tam sayıya dönüştür
  3. factorial adlı bir tamsayı parametresi alan, n adlı özyinelemeli bir işlev oluştur
  4. factorial işlevi aşağıdaki mantığı uygulamalıdır:
    • Temel durum: n 1'e eşit veya küçükse 1 döndür
    • Özyinelemeli adım: n ile factorial(n - 1) değerinin çarpımını döndür
  5. Girdi listesindeki her sayı için özyinelemeli işlevini kullanarak faktöriyelini hesapla
  6. Her sayıyı ve karşılık gelen faktöriyelini göstererek sonuçları görüntüle
  7. Tüm faktöriyel sonuçlarının toplamını hesapla ve görüntüle

Örneğin, girdi "4,3,2" ise programın şu çıktıyı vermelidir:

Factorial Calculator
====================
Processing numbers: [4, 3, 2]
====================
Factorial Results:
4! = 24
3! = 6
2! = 2
====================
Sum of all factorials: 32
Calculation completed successfully

Girdi "5,0,1" ise programın şu çıktıyı vermelidir:

Factorial Calculator
====================
Processing numbers: [5, 0, 1]
====================
Factorial Results:
5! = 120
0! = 1
1! = 1
====================
Sum of all factorials: 122
Calculation completed successfully

Girdi "6" ise programın şu çıktıyı vermelidir:

Factorial Calculator
====================
Processing numbers: [6]
====================
Factorial Results:
6! = 720
====================
Sum of all factorials: 720
Calculation completed successfully

Programın, temel duruma ulaşana kadar azalan değerlerle kendisini çağıran özyinelemeli factorial işlevini uygulaması gerekir. İşlev, özyinelemenin faktöriyel hesaplamasını daha küçük ve aynı alt problemlere nasıl böldüğünü göstermelidir. Faktöriyel sonuçlarını "$n! = $result" olarak biçimlendirmek için dize interpolasyonu kullan. Matematiksel tanım gereği 0! değerinin 1 olduğunu ve temel durumunun bunu doğru şekilde ele alması gerektiğini unutma.

Kendin dene

import 'dart:io';

// TODO: Özyinelemeli (recursive) faktöriyel fonksiyonunuzu burada oluşturun

void main() {
  // Virgülle ayrılmış sayıları içeren giriş dizesini oku
  String? input = stdin.readLineSync();
  
  // Girişi böl ve tam sayılara dönüştür
  List<int> numbers = input!.split(',').map((str) => int.parse(str.trim())).toList();
  
  // TODO: Aşağıdaki işlemleri yapmak için kodunuzu yazın:
  // 1. Faktöriyel fonksiyonunuzu kullanarak her bir sayıyı işleyin
  // 2. Tüm faktöriyellerin toplamını hesaplayın
  // 3. Sonuçları istenen formatta görüntüleyin
  
  print("Factorial Calculator");
  print("====================");
  print("Processing numbers: $numbers");
  print("====================");
  print("Factorial Results:");
  
  // TODO: Faktöriyel sonuçlarını burada hesaplayın ve görüntüleyin
  
  print("====================");
  // TODO: Tüm faktöriyellerin toplamını görüntüleyin
  print("Calculation completed successfully");
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi