재귀 함수
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 8번째.
재귀(Recursion)는 함수가 문제를 해결하기 위해 자기 자신을 호출하는 프로그래밍 기법입니다. 이는 루프와 유사한 동작을 생성하지만, 전통적인 루프를 사용하는 대신 함수가 해결책에 도달할 때까지 수정된 매개변수를 사용하여 반복적으로 자기 자신을 호출합니다.
모든 재귀 함수가 올바르게 작동하려면 두 가지 필수 구성 요소가 있어야 합니다:
기본 케이스(Base Case): 이것은 재귀를 중단시키는 조건입니다. 이것이 없으면 함수가 자신을 무한히 호출하여 프로그램이 중단(crash)될 수 있습니다. 기본 케이스는 함수가 자신을 다시 호출하는 대신 결과를 반환해야 하는 시점을 정의합니다.
재귀 단계: 함수가 원래 문제의 수정된 버전을 사용하여 자기 자신을 호출하며, 점진적으로 기본 사례(base case)를 향해 나아가는 부분입니다.
다음은 팩토리얼을 계산하는 재귀 함수의 간단한 예시입니다:
<?php
function factorial($n) {
// 기저 사례: 1의 팩토리얼은 1입니다
if ($n <= 1) {
return 1;
}
// 재귀 단계: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // 출력: 120
?>이 예제에서 factorial(5)는 factorial(4)를 호출하고, 이는 다시 factorial(3)을 호출하며, 이런 식으로 factorial(1)(기본 케이스)에 도달할 때까지 계속됩니다. 그 후 결과가 다시 곱해집니다: 1 × 2 × 3 × 4 × 5 = 120.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움양의 정수를 입력받아 각 자릿수의 합을 반환하는 sumDigits라는 재귀 함수를 작성하세요. 이 함수는 재귀를 사용하여 숫자를 자릿수별로 분해해야 합니다.
하나의 입력을 받게 됩니다: 양의 정수 하나. 입력을 읽고, 해당 숫자로 재귀 함수를 호출한 뒤, 각 자릿수의 합을 출력하세요.
입력 형식: 양의 정수 하나가 포함된 한 줄
예상 출력: 숫자의 모든 자릿수의 합
치트 시트
재귀는 함수가 문제를 해결하기 위해 자기 자신을 호출하는 프로그래밍 기법입니다. 모든 재귀 함수에는 두 가지 구성 요소가 필요합니다:
기본 케이스(Base Case): 무한 루프를 방지하기 위해 재귀를 중단하는 조건입니다.
재귀 단계(Recursive Step): 함수가 수정된 매개변수를 사용하여 자기 자신을 호출하며 기본 케이스를 향해 나아가는 단계입니다.
재귀 팩토리얼 함수의 예시:
<?php
function factorial($n) {
// 기본 케이스: 1의 팩토리얼은 1입니다
if ($n <= 1) {
return 1;
}
// 재귀 단계: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // 출력: 120
?>직접 해보기
<?php
// 입력 읽기
$number = intval(fgets(STDIN));
// TODO: 여기에 재귀 함수 sumDigits를 만드세요
// 함수를 호출하고 결과를 출력합니다
echo sumDigits($number);
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.