
어떠한 것을 정의할 때 자기 자신을 참조하는 것을 말하며 컴퓨터 과학과 수학에서, 재귀는 함수가 자신의 정의에 의해 정의될 때의 개념을 가리킨다.
또한 문제 해결을 위해 문제가 간단해져 바로 풀 수 있도록 알고리즘을 설계해 문제를 해결하는 방법을 말한다.
재귀 호출(recursive call)을 사용하는 함수, 함수 정의에 자기자신을 사용하며 정의하고 호출한다.
재귀 호출(recursive call)
1부터 n까지 양의 정수를 차례대로 곱한 값이며
!(느낌표) 기호로 표기
ex) 5!은 5 * 4 * 3 * 2 * 1이며 결과는 120
def factorial(n):
if n == 1: # n이 1일 때
return 1 # 1을 반환하고 재귀호출을 끝냄
return n * factorial(n - 1) # n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함
print(factorial(5))
# 120
factorial 함수의 호출

factorial 함수의 반환

factorial 함수의 호출 순서와 계산 과정

그림 출처: 파이썬 코딩 도장
피보나치 수(Fibonacci numbers)는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열을 말한다. 즉 처음 여섯 항은 1, 1, 2, 3, 5, 8이며 그 뒤로 쭉 이어진다. 또한 프로그래밍에서 인덱스가 0부터 시작하는 것과 함께 0번째 항을 0으로 두기도 한다.
f(n) = f(n-1) + f(n-2)
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, .....
재귀함수로 피보나치 수열을 구현할 경우 수학에서의 점화식과 비슷한 형태로 코드를 작성할 수 있기 때문에 가독성이 높아진다. 그러나 재귀함수의 특성상 연산 효율이 떨어진다는 것이 단점인데, 이것은 인덱스 숫자(피보나치 수 몇 번째 값)가 높아질수록 연산 효율이 급격하게 떨어진다는 것이 가장 큰 문제점이다.
피보나치 수열에서 N(input) 번째 수를 반환
만약n = 4라면fib(n) = 3def fibo(n): if n < 3: return 1 else: return fibo(n-1) + fibo(n-2) print(fibo(4)) # 3
- [python] 재귀함수(recursive function)
http://tcpschool.com/c/c_function_recursive- [파이썬 코딩 도장] 재귀호출 사용하기
https://dojang.io/mod/page/view.php?id=2352- 반드시 알아야하는 알고리즘 top 8 - 1. 재귀 알고리즘
https://gomguard.tistory.com/111- [Python] 파이썬 피보나치 수열 재귀함수와 메모이제이션
https://devinus.tistory.com/38