반응형
팩토리얼
def factorial(n):
if n == 1 || n== 0:
return 1
return n * factorial(n - 1)
n = 3
print("**팩토리얼")
print(factorial(n))
- 시간복잡도 O(N) : N번 계산됨 (3*f(2), 2*f(1), 1,*f(0))
- 공간복잡도 O(N) : 재귀함수 N번 호출됨
피보나치수열
def fibo(n):
if n==1 : return 1
if n==2 : return 1
return fibo(n-1)+fibo(n-2)
print("**피보나치수열")
print(fibo(n))
- 시간복잡도 O(2^N) : 2^N번 연산됨 (f(4)+f(3), f(3)+f(2) f(2)+(1), f(2)+f(1))
- 공간복잡도 O(2^N) : 재귀함수 2^N번 호출됨
재귀호출시 memo를 활용하여 시간복잡도를 줄일 수 있다.
def fibo(n):
memo = [0] * (n + 1)
memo[1] = 1
if n >= 2:
memo[2] = 1
return __fibo(n, memo)
def __fibo(n, memo):
if memo[n] > 0: # 이미 호출된 적이 있어서 memo에 담아두었으면
return memo[n]
else:
res = __fibo(n - 1, memo) + __fibo(n - 2, memo)
memo[n] = res
return res
if __name__ == '__main__':
print(fibo(7))
- 시간복잡도 O(N)
순열
def p(x, n,result):
if x == n : #순열에 있는 숫자의 개수 (x)
print(result)
return
for i in range(1,n+1): # 1부터 n까지 숫자(i) 로 이루어진 순열
result[x] = i
p(x+1,n,result)
- 시간복잡도 O(N^X) : N^X
- 공간복잡도 O(X)? :
반응형
'프로그래밍 > 알고리즘 문제' 카테고리의 다른 글
[리스트] Leet Code 26. Remove Duplicates from Sorted Array (2) | 2021.03.20 |
---|---|
[스택] Leet Code 20. Valid Parentheses (2) | 2021.03.18 |
[Quick Sort] python 퀵정렬 (2) | 2021.03.16 |
[이진트리] 순회 & add (4) | 2021.03.16 |
[분할정복] LeetCode 14 - Longest Common Prefix (4) | 2021.03.16 |
댓글