본문 바로가기
CS

[Algorithm] 재귀(Recursion)

by 공.대.남 2023. 3. 13.
반응형

안녕하세요! 공대남입니다.

오늘은 재귀 알고리즘에 대해 알아볼게요.

 

재귀(Recursion) 알고리즘이란?

하나의 함수에서 자기 자신을 다시 호출하여 작업을 수행하는 알고리즘이다.

 

재귀함수 ? 재귀호출 ?

자기자신을 호출하는 함수를 재귀함수라고 하며, 이때 하는 호출을 재귀호출이라고 합니다.

 

재귀함수의 장점과 단점

  • 직관적이다
  • 무한루프에 빠질수있다.
  • 재귀 호출의 깊이가 너무 깊어지면 너무 많은 메모리를 사용한다.
  • 불필요한 반복 연산을 하게 될 가능성이 있다. => 메모이제이션을 통해 해결가능

 

팩토리얼 문제 

def factorial(n):
    if n <= 1:
        return 1
    
    else:
        return n * factorial(n - 1)

n = int(input())
print(factorial(n))

 

피보나치 문제

int fibonacci(int n) {
    if (n == 1 || n == 2) return 1;
    else return fibonacci(n - 1) + fibonacci(n - 2);
}
 
int fibonacci_memo(int n) {
    if (n == 1 || n == 2) return 1;
    if (memo[n] != 0) return memo[n]; // 메모이제이션
    else memo[n] = fibonacci_memo(n - 1) + fibonacci_memo(n - 2); // memo 에 저장
    return memo[n];
}

 

하노이 탑, 플러드 필, 프랙탈 트리, 파일 탐색 등등

728x90
반응형

'CS' 카테고리의 다른 글

[Algorithm] 선택(Selection)/삽입(Insertion)정렬  (0) 2023.03.16
[Algorithm] DFS/BFS  (0) 2023.03.16
[Algorithm] 트리의 순회(Tree Traversal)  (0) 2023.03.15
우선순위 큐(Priority Queue)  (0) 2023.03.15
[Algorithm] 스택(Stack), 큐(Queue)  (0) 2023.03.13

댓글