예전에 c언어를 공부할때 재귀함수를 간단히 다뤄본적이 있다. 솔직히 구조가 한눈에 들어오지 않아서 꽤 맘에 안들었고 그 이후로는 자발적으로 재귀함수를 써본적이 없다.
그래도 이번에 재귀함수를 써야하는 문제가 나와서 오랜만에 재귀함수를 쓰게 되었다.
재귀라는 것은 어떤 사건에 대해서 나를 포함하나 나를 사용하여 정의되는 것을 의미한다.
함수로 생각한다면 함수를 정의할때 선언하는 함수가 포함되어있는것을 재귀함수라고 한다.
아래의 함수를 보면 packtorial함수정의 안에 return값으로 packtorial이 다시 포함되는 것을 확인할 수 있다.
만약 if 조건이 없다면 이 함수는 계속해서 무한루프에 빠질 것이다.
그러나 조건을 선언해주었기 때문에 함수가 종료될 수 있는 것이다.
n = int(input())
def packtorial(num):
if num == 0:
return 1
return num*packtorial(num-1)
print(packtorial(n))
함수는 크게 별게 없다. 인자를 주면 조건을 확인하고 return으로 num*packtorial을 해준다.
그러면 첫번째 실행하면 n*(n-1)! 을 리턴한다.
그럼 두번째 실행하면 n*(n-1)*(n-2)!가 실행되는 것이다. 이게 반복되다가 num값이 0이라면 1을 리턴한다.
나중에 어려운 재귀가 나올때 헷갈리지 않게 개념을 명확히 해야겠다.
'알고리즘' 카테고리의 다른 글
백준 2447 풀이 (재귀함수, 별찍기 - 10) (0) | 2021.02.10 |
---|---|
백준 10870 풀이 (재귀함수, 피보나치) (0) | 2021.02.10 |
#3 알고리즘 공부 2/8 리뷰 (0) | 2021.02.08 |
백준 9020 풀이 (골드바흐의 추측 ) (0) | 2021.02.08 |
백준 4948 풀이 (python3 시간초과) (0) | 2021.02.08 |