학습 일자 : 2023.
어떠한 것을 정의할 때 자기 자신을 참조하는 것
[재귀 함수 예시]
int Factorial(int x)
{
if (x == 1) //종료 조건
return 1;
else { return x * Factorial(x - 1); } //자신을 다시 호출함
}
⇒ 재귀 함수는 함수 종료 후 재귀함수 호출 바로 다음 줄로 돌아온다는 것을 주의해야 함!
return x * Factorial(x - 1); 는 풀어 쓰면, 다음과 같이 쓸 수 있음.
int Factorial(int x) // (0)
{
Console.Write($"{x} >> "); // (1)
if (x == 1)
{ // (2)
Console.WriteLine();
return 1;
}
else
{ // (3)
int num = Factorial(x - 1); // (4)
Console.WriteLine($" x : {x} \\t Factorial(x - 1) : {num}"); //(5)
return num * x; // (6)
}
}
[output]
| 10 >> 9 >> 8 >> 7 >> 6 >> 5 >> 4 >> 3 >> 2 >> 1 >> x : 2 Factorial(x - 1) : 1 x : 3 Factorial(x - 1) : 2 x : 4 Factorial(x - 1) : 6 x : 5 Factorial(x - 1) : 24 x : 6 Factorial(x - 1) : 120 x : 7 Factorial(x - 1) : 720 x : 8 Factorial(x - 1) : 5040 x : 9 Factorial(x - 1) : 40320 x : 10 Factorial(x - 1) : 362880
재귀함수 종료 : 10 |
---|
[호출 순서] 0 → 1 → 3 → 4 → 0 → 1 → 2 → 3 → 4 → 0 … x가 1이 될 때까지 반복, x가 1이 되면 2번으로 이동 = 더 이상 자신을 호출 하지 않음 → 재귀함수 루프 종료
→ 루프 종료 후 재귀함수 호출 다음 위치(5번)로 돌아와 남은 작업을 수행함. (재귀함수 호출 횟수만큼 반복)
→ 남은 작업이 출력과 x값 리턴이기 때문에 함수 종료 후 x 값은 1이 아닌 10이 됨.
<aside> 💡 재귀 함수는 문을 열고 들어가는 작업임
→ 문을 열고 끝까지 들어갔으면, 작업 종료 후 하나 하나 다시 문을 닫으며서 나와야 함.
</aside>