1 minute read

재귀

재귀 함수는 자기 자신을 호출하는 함수다.
재귀적으로 문제를 풀려면 같은 형태의 더 작은 문제를 푼다. 그리고 그 답을 이용해서 기존 문제를 푼다.
base case와 recursive case를 생각해야 한다.

팩토리얼

3! = 3 * 2 * 1
2! = 2 * 1
1! = 1
예외 - 0! = 1

def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)

3!을 구하려면 2!를 구해야 하고 2!를 구하려면 1!을 구하고 1!을 구하려면 0!을 구해야한다. 0! 즉 n = 0인 경우 n! = 1, n > 0 인 경우 n! = (n - 1)! * n 이다.

n = 0인 경우는 base case
n > 0인 경우는 recursive case

재귀함수와 반복문

재귀 함수 호출이 너무 많으면 call stack이 너무 많이 쌓여 프로그램이 중단될 수 있다.
파이썬은 1000개 까지의 call stack을 허용한다.
반복문보다 재귀를 썼을 때 코드가 더 깔끔하지만 재귀적으로 너무 많은 함수 호출을 한다면 반복문을 쓰는게 좋다.

피보나치 수열

def fib(n):
    if n < 3:
        return 1
    return fib(n - 1) + fib(n - 2)

피보나치1 = 1
피보나치2 = 1
피보나치3 = 2
피보나치4 = 3
피보나치5 = 5

base case는 n = 1 or 2 음수는 제외해야 하니 n < 3
피보나치5는 피보나치3과 4의 합이고 피보나치4는 피보나치3과 2의 합이다.
recursive case는 fib(n - 1) + fib(n - 2)

Leave a comment