팩토리얼은 숫자! 로 표시한다. 뜻은 주어진 수에서 1을 빼고, 뺀 값을 원래 값에 곱하는데
그 과정을 0이 될 때까지 반복한 수다.
방법1, 재귀함수
def fact1(num):
if num >0:
return fact(num-1) * num
# 5가 들어갈 경우 fact(4) * 5 -> fact(3) * 4 * 5
# -> fact(1) * 2 * 3 * 4 * 5 -> fact(0) * 1 *2 * 3 * 4 * 5
# -> 1 * 2 * 3 * 4 * 5 = 120
else:
return 1
print(fact1(5))
// 120
처음 fact(5)가 호출되면 5가 0보다 크니 리턴으로 간다. 그런데 거기서 1 작은 fact1이 호출된다.
그걸 0까지 반복하면 1이 나온다.
그럼 fact(0)이 끝나고 fact(1)로 간다. fact(1)은 fact(0)의 리턴값 * 1을 반환하고 fact(2)로 간다.
fact(2)는 fact(1)의 반환값인 1 * 2를 반환하고 3으로 간다.
3은 2 * 3을 4로 가져가고 4는 6 * 4를 5로 가져간다.
fact(5)는 24 * 5를 반환하고 함수가 끝나게 된다.
재귀함수 없이 factorial 값 구하기
def fact2(num):
result = 1
for i in range(1, num + 1):
result *= i
return result
print(fact2(5))
print(fact2(6))
// 120 // 720
둘 다 사용가능하지만, 재귀함수의 경우, 스택 메모리가 많이 쌓이기 때문에 대체가능하면
반복문을 쓰는 게 좋다. (재귀함수로만 구현 가능할 때 사용)
'자료구조' 카테고리의 다른 글
7주차, 시간복잡도 (0) | 2022.02.02 |
---|---|
7주차, 자료구조 개념, 빅오 표기법 (0) | 2022.02.02 |
6주차, 파이썬으로 sort 구현 (0) | 2022.01.24 |
5주차 4, 중첩함수와 적용되는 지역변수 (0) | 2022.01.19 |
5주차 3, generator와 yield (0) | 2022.01.19 |
댓글