Menu
Coddy logo textTech

Ö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.

challenge icon

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.

  1. Geri sayımın başlangıç sayısını temsil eden bir dize girdisi okuyun
  2. Özel bir mesaj ön ekini temsil eden bir dize girdisi okuyun (örneğin, "Launch in", "Timer" veya "Countdown")
  3. İlk girdiyi int.parse() kullanarak bir tamsayıya dönüştürün
  4. İki parametre alan customCountdown adlı ö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
  5. İş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 - 1 ile çağırın
  6. customCountdown işlevini dönüştürülmüş sayı ve mesaj ön ekiyle çağırın
  7. 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
}
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