Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 1:1관계
- Redux
- 지역성
- realloc
- 항해99 #1주차 #미니프로젝트 #WIL
- 분할정복
- 탑다운
- 이진탐색
- recursive
- 포인터선언
- 크래프톤정글2기
- 알고리즘
- 메모이제이션
- 다이나믹프로그래밍
- 크래프톤
- github #github세팅 #깃허브 #깃허브잔디
- NULL포인터
- 동적메모리할당
- 크래프톤정글
- insertion
- 데이터처리
- Mac #M1 #node #노드버전 #노드다운그레이드
- Recoil
- MySQL
- github #깃허브 #깃허브설정 #깃허브업로드
- 상태관리
- 보텀업
- 포인터접근
- 재귀함수
- calloc
Archives
- Today
- Total
우당탕탕 개발일지
재귀호출(Recursive call) 본문
함수 안에서 함수 자기자신을 호출하는 방식
보통 알고리즘에 따라서 반복문으로 구현한 코드보다 재귀호출로 구현한 코드가 좀 더 직관적이고 이해하기 쉬운 경우가 많음
파이썬 최대 재귀깊이 1000
재귀호출과 스택 넘침 현상
- 함수가 자기자신을 계속 호출하다가 최대 깊이(1000)를 초과하면 RecursiveError가 발생
재귀호출에 종료 조건 만들기
def hello(count):
if count == 0:
return
print('Hello, world!', count)
count -=1
hello(count)
hello(5)
피보나치 수열
- 재귀는 거꾸로 생각해야 한다(ex. fib(6)을 구하려면 fib(5) + fib(4)가 필요하다), 역산
1 1 2 3 5 8 13 21 ...
f(n) = f(n-1) + f(n-2)
fib(6) = fib(5) + fib(4)
fib(5) = fib(4) + fib(3)
fib(4) = fib(3) + fib(2)
fib(3) = fib(2) + fib(1)
fib(2) = fib(1) + fib(0)
이렇게 반복되어서 나오기 때문에 시간이 오래걸림
#피보나치 수열
# fib(1) = 1, fib(2) = 1, fib(3) = 2, fib(4) = 3, ...
# 재귀
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
# 반복문
def fib(num):
result = []
first = 1
second = 1
if (num > 1):
result.append(first)
result.append(second)
for i in range(2, num):
third = first+second
result.append(third)
first = second
second = third
print(first, second)
return result.pop()
피보나치 수열은 다이나믹 프로그래밍을 이용해서 해결한다
'알고리즘' 카테고리의 다른 글
시간복잡도, 공간복잡도 ( Big-O Notation) (0) | 2023.05.06 |
---|---|
이진탐색(Binary Search) (0) | 2023.04.13 |
삽입 정렬(Insertion Sort) (0) | 2023.04.10 |
다이나믹 프로그래밍(DP), 메모이제이션 (0) | 2023.03.02 |
스택, 큐, DFS, BFS (0) | 2023.03.01 |