스파르타 내일 배움 캠프 AI 웹개발 과정/python
[알고리즘] 재귀함수(Recursion Function), 팩토리얼, 파이썬 내장함수 zip() divmod()
Woolina
2024. 7. 16. 20:02
재귀 함수(Recursion Function)
함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식
예제. 팩토리얼
시간복잡도: O(n)
공간복잡도는 for문을 사용하는 경우가 더 낫지만,
재귀함수가 가독성이 훨씬 좋다.
# 내 코드!
def factorial(i):
if i == 0:
return 1
result = i * factorial(i-1)
return result
def solution(n):
for i in range(1, 3628800):
# while factorial(i) < n 써도됨
if factorial(i) < n:
pass
elif factorial(i) > n:
break
return i-1
def factorial(i): if i == 0: return 1 return i * solution(i-1) 로 한줄 축약도 가능
zip() 함수
마치 옷의 지퍼(zipper)처럼 두 그룹의 데이터를 서로 엮어주는 파이썬의 내장 함수
여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환
numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
print(pair)
"
(1, 'A')
(2, 'B')
(3, 'C')
"
divmod()
매개변수로 두개의 숫자를 입력받아 몫과 나머지를 튜플로 반환한다.
a = divmod(10, 3)print(a) # (3, 1)
b = divmod(7, 4)print(b) # (1, 3)
c, d = *divmod(10, 3)
print(c) # 3
print(d) # 1
가독성이나, 팀의 코드 스타일에 따라서, a//b, a%b와 같이 쓸 때가 더 좋을 수도 있다.
또한, divmod는 작은 숫자를 다룰 때는 a//b, a%b 보다 느리다.
대신, 큰 숫자를 다룰 때는 전자가 후자보다 더 빠르다.