Ö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.
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.
- Virgüllerle ayrılmış sayıları içeren bir dize girdisi oku (ör.
"3,5,0,7") - Girdi dizesini tek tek sayılara ayır ve her birini bir tam sayıya dönüştür
factorialadlı bir tamsayı parametresi alan,nadlı özyinelemeli bir işlev oluşturfactorialişlevi aşağıdaki mantığı uygulamalıdır:- Temel durum:
n1'e eşit veya küçükse 1 döndür - Özyinelemeli adım:
nilefactorial(n - 1)değerinin çarpımını döndür - Girdi listesindeki her sayı için özyinelemeli işlevini kullanarak faktöriyelini hesapla
- Her sayıyı ve karşılık gelen faktöriyelini göstererek sonuçları görüntüle
- 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 successfullyGirdi "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 successfullyGirdi "6" ise programın şu çıktıyı vermelidir:
Factorial Calculator
====================
Processing numbers: [6]
====================
Factorial Results:
6! = 720
====================
Sum of all factorials: 720
Calculation completed successfullyProgramı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");
}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
1İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli ListesiKendi başına pratik yap: Online Dart derleyicisi