1. 서론
오늘은 for문을 통해 구현할 수 있는 알고리즘을 재귀 호출을 이용해 구현해 보았고,
어떤 게 더 효율적인지 생각해보았다.
2. 문제
1) for문을 사용하여 1부터 n까지 곱을 반환하는 알고리즘
for문을 사용하여 변수 n을 입력받아 1부터 n까지의 곱을 반환하는 함수 fact을 작성하세요.
풀이
def fact(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
print(fact(1))
print(fact(5))
print(fact(10))
2) 재귀 호출을 사용하여 1부터 n까지 곱을 반환하는 알고리즘
재귀 호출 알고리즘을 사용하여 변수 n을 입력받아 1부터 n까지의 곱을 반환하는 함수 fact을 작성하세요.
풀이
def fact(n):
if n == 1:
return 1
else:
return n * fact(n - 1)
print(fact(1))
print(fact(5))
print(fact(10))
그렇다면 둘 중 어떤 코드가 더 좋은 코드일까?
답은 상황에 따라 다르지만 아래의 사항들을 참고할 수 있겠다.
1. 가독성: 코드의 가독성은 중요하다. 간단한 작업이라면 for문이 더 직관적이고 이해하기 쉬울 수 있다. 반면, 재귀 호출은 문제를 잘게 쪼개어 해결하는데 도움이 될 수 있지만, 코드가 복잡해질 수 있다.
2. 성능: 일부 경우에는 for문이 재귀 호출보다 빠를 수 있다. 특히 큰 숫자에 대해 재귀 호출을 사용하면 스택 오버플로우(재귀의 깊이가 너무 깊어짐) 문제가 발생할 수 있다. 작업의 효율성과 성능을 고려하여 선택해야 한다.
3. 문제의 본질: 문제 자체가 재귀 호출을 사용하기에 적합한 구조를 갖고 있다면, 재귀 호출이 더 적절할 수 있다. 분할 정복, 트리 구조, 그래프 탐색 등의 문제들은 재귀적 접근이 자연스러울 수 있다.
4. 메모리 사용: 재귀 호출은 함수가 호출될 때마다 스택에 새로운 프레임을 생성하므로 메모리 사용 측면에서 주의가 필요하다. for문은 메모리 측면에서 보다 더 효율적일 수 있다.
'기타 > 엘카데미' 카테고리의 다른 글
[엘카데미 챌린지] 18일차 파이썬 알고리즘 (5) (0) | 2023.08.04 |
---|---|
[엘카데미 챌린지] 17일차 파이썬 알고리즘 (4) (0) | 2023.08.03 |
[엘카데미 챌린지] 15일차 파이썬 알고리즘 (2) (0) | 2023.07.31 |
[엘카데미 챌린지] 14일차 파이썬 알고리즘 (1) (0) | 2023.07.30 |
[엘카데미 챌린지] 13일차 생활코딩 자바스크립트 (3) (0) | 2023.07.30 |