Özyinelemeli Fonksiyon: Geri Sayım
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 48 / 65.
Şimdi özyinelemeyi basit bir geri sayım işleviyle uygulamaya koymanın zamanı. Bu alıştırma, temel durum ile özyinelemeli adımın gerçek kodda birlikte nasıl çalıştığını anlamana yardımcı olacak.
Bir geri sayım işlevi bir sayıyla başlar ve sıfıra kadar her sayıyı yazdırır. Özyinelemenin bunu nasıl sağladığı şöyledir: sayı sıfırdan büyükse onu yazdırın ve ardından aynı işlevi daha küçük bir sayıyla çağırın. Sayı sıfıra ulaştığında durun.
void countdown(int number) {
if (number <= 0) {
print("Done!");
return; // Temel durum - burada dur
}
print(number);
countdown(number - 1); // Özyinelemeli adım
}Temel durum, number <= 0 olup olmadığını kontrol eder - işlevi çağırmayı bıraktığımız nokta budur. Özyinelemeli adım, aynı problem olan ancak girdisi daha küçük olan ve bizi yavaş yavaş temel duruma yaklaştıran countdown(number - 1) çağrısını yapar.
countdown(3) çağırdığınızda 3'ü yazdırır, ardından 2'yi yazdıran countdown(2)'yi çağırır, sonra 1'i yazdıran countdown(1)'i çağırır, ardından "Done!" yazdıran ve duran countdown(0)'ı çağırır.
Görev
KolayÖzel mesajlarla özyinelemeli bir geri sayım zamanlayıcısı uygulayan bir program oluşturun. Programınız, verilen bir sayıdan geri sayarak ve her adımda kişiselleştirilmiş mesajlar görüntüleyerek özyinelemeyi gösterecektir.
- Geri sayımın başlangıç sayısını temsil eden bir dize girdisi okuyun
- Özel bir mesaj ön ekini temsil eden bir dize girdisi okuyun (örneğin,
"Launch in","Timer"veya"Countdown") - İlk girdiyi
int.parse()kullanarak bir tamsayıya dönüştürün - İki parametre alan
customCountdownadlı özyinelemeli bir işlev oluşturun: - Geçerli geri sayım değerini temsil eden bir tamsayı
number - Özel mesaj için bir dize
messagePrefix - İşlev aşağıdaki mantığı uygulamalıdır:
- Temel durum: Sayı 0'dan küçük veya eşitse
"Countdown complete!"yazdırın ve geri dönün - Özyinelemeli adım: Mesaj ön ekini geçerli sayının ardından yazdırın, ardından kendisini
number - 1ile çağırın customCountdownişlevini dönüştürülmüş sayı ve mesaj ön ekiyle çağırın- Sonuçları aşağıda gösterilen tam biçimde görüntüleyin
Örneğin, girdiler "5" ve "Launch in" ise programınızın çıktısı şöyle olmalıdır:
Starting countdown from: 5
Message prefix: Launch in
========================
Launch in 5
Launch in 4
Launch in 3
Launch in 2
Launch in 1
Countdown complete!Girdiler "3" ve "Timer" ise programınızın çıktısı şöyle olmalıdır:
Starting countdown from: 3
Message prefix: Timer
========================
Timer 3
Timer 2
Timer 1
Countdown complete!Girdiler "0" ve "Ready" ise programınızın çıktısı şöyle olmalıdır:
Starting countdown from: 0
Message prefix: Ready
========================
Countdown complete!Programınız, temel duruma ulaşana kadar kendisini azaltılmış bir sayıyla çağıran özyinelemeli customCountdown işlevini uygulamalıdır. İşlev, her özyinelemeli çağrıda geçerli sayıyla birlikte özel mesajı yazdırmalı ve özyinelemenin problemi daha küçük, aynı yapıdaki alt problemlere nasıl ayırdığını göstermelidir. Geri sayım mesajlarını "$messagePrefix $number" olarak biçimlendirmek için dize enterpolasyonunu kullanın.
Kendin dene
import 'dart:io';
// TODO: customCountdown fonksiyonunuzu burada oluşturun
// Temel durumu (number <= 0) ve özyinelemeli adımı işlemeyi unutmayın
void main() {
// Girdiyi oku
String? startingNumber = stdin.readLineSync();
String? messagePrefix = stdin.readLineSync();
// String'i tamsayıya dönüştür
int number = int.parse(startingNumber!);
// Başlangıç bilgilerini görüntüle
print('Starting countdown from: $number');
print('Message prefix: $messagePrefix');
print('========================');
// TODO: customCountdown fonksiyonunuzu burada çağırın
// Remember to handle null safety for messagePrefix
}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