Lina's Toolbox

[알고리즘] 재귀함수(Recursion Function), 팩토리얼, 파이썬 내장함수 zip() divmod() 본문

스파르타 내일 배움 캠프 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 보다 느리다. 

대신, 큰 숫자를 다룰 때는 전자가 후자보다 더 빠르다.