Menu
Coddy logo textTech

재귀 함수: 카운트다운

Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨. 65개 중 48번째.

이제 간단한 countdown function으로 재귀를 실제로 적용해 볼 시간입니다. 이 연습은 실제 코드에서 base case와 recursive step이 어떻게 함께 작동하는지 이해하는 데 도움이 됩니다.

카운트다운 function은 number로 시작하며, 각 number를 0까지 내림차순으로 print합니다. recursion이 이를 작동하게 하는 방식은 다음과 같습니다. if number가 0보다 크면, 해당 number를 print한 다음 더 작은 number와 함께 동일한 function을 Call합니다. number가 0에 도달하면 stop합니다.

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // 기저 사례 - 여기서 멈춤
  }
  
  print(number);
  countdown(number - 1); // 재귀 단계
}

기본 사례는 number <= 0인지 확인합니다. 이는 함수 호출을 중지하는 시점입니다. 재귀 단계에서는 countdown(number - 1)을 호출합니다. 이는 더 작은 입력을 사용하는 동일한 문제이며, 점차 기본 사례에 가까워집니다.

countdown(3)을 호출하면 3을 출력한 다음 countdown(2)를 호출하고, 이는 2를 출력한 다음 countdown(1)을 호출하며, 이는 1을 출력한 다음 countdown(0)을 호출하고, 이는 "Done!"을 출력한 후 중지합니다.

challenge icon

챌린지

쉬움

Create 두 개의 사용자 지정 메시지를 사용하는 recursive 카운트다운 타이머를 구현하는 프로그램을 작성하세요. 프로그램은 주어진 숫자부터 카운트다운하고 각 단계에서 개인화된 메시지를 표시하여 재귀를 보여 줍니다.

  1. 카운트다운의 시작 숫자를 나타내는 string input을 Read합니다
  2. 사용자 지정 메시지 접두사를 나타내는 string input을 Read합니다(예: "Launch in", "Timer" 또는 "Countdown")
  3. int.parse()를 사용하여 첫 번째 input을 integer로 Convert합니다
  4. 두 개의 매개변수를 받는 recursive function customCountdown을 Create합니다:
    • 현재 카운트다운 값을 나타내는 integer number
    • 사용자 지정 메시지를 위한 string messagePrefix
  5. function은 다음 로직을 구현해야 합니다:
    • Base case: number가 0보다 작거나 같으면 "Countdown complete!"을 print하고 return합니다
    • Recursive step: 메시지 접두사 뒤에 현재 number를 print한 다음, number - 1를 사용하여 자기 자신을 Call합니다
  6. Convert된 number와 message prefix를 사용하여 customCountdown function을 Call합니다
  7. 아래에 표시된 정확한 형식으로 결과를 Display합니다

예를 들어 input이 "5""Launch in"이면 프로그램은 다음을 출력해야 합니다:

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!

input이 "3""Timer"이면 프로그램은 다음을 출력해야 합니다:

Starting countdown from: 3
Message prefix: Timer
========================
Timer 3
Timer 2
Timer 1
Countdown complete!

input이 "0""Ready"이면 프로그램은 다음을 출력해야 합니다:

Starting countdown from: 0
Message prefix: Ready
========================
Countdown complete!

프로그램은 감소된 number를 사용하여 자기 자신을 Call하고 Base case에 도달할 때까지 계속하는 recursive customCountdown function을 구현해야 합니다. function은 각 recursive 호출에서 현재 number와 함께 사용자 지정 메시지를 print하여, 재귀가 문제를 더 작고 동일한 하위 문제로 분할하는 방식을 보여 줘야 합니다. 문자열 보간을 사용하여 카운트다운 메시지를 "$messagePrefix $number"와 같이 형식화하세요.

직접 해보기

import 'dart:io';

// TODO: 여기에 customCountdown 함수를 작성하세요
// 기본 케이스(number <= 0)와 재귀 단계를 처리하는 것을 기억하세요

void main() {
  // 입력 읽기
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // 문자열을 정수로 변환
  int number = int.parse(startingNumber!);
  
  // 초기 정보 표시
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: 여기에서 customCountdown 함수를 호출하세요
  // Remember to handle null safety for messagePrefix
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨

직접 연습해 보세요: 온라인 Dart 컴파일러