Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/10월

22.10.21 - [ 플러스 알파 ] 재귀함수, 시간 복잡도(빅오표기법)

giggs 2022. 11. 9. 14:11

 

 

-- INDEX --

 

 

1. 재귀 함수 2. 시간 복잡도
재귀호출이란?
재귀호출 예시
알고리즘 평가 요소 중 수행 시간
빅오표기법 ( 최악의 경우의 수행 시간 )

 

 


 

 

 

1. 재귀 호출 ( recursive call )이란?

  • 함수 내부에서 함수가 자기 자신을 또다시 호출하는 행위를 의미합니다.
  • 이러한 재귀 호출은 자기가 자신을 계속해서 호출하므로, 끝없이 반복되게 됩니다.
  • 따라서 함수 내에 재귀 호출을 중단하도록 조건이 변경될 명령문을 반드시 포함해야 합니다.
  • 재귀 호출은 알고리즘이나 자료 구조론에서는 매우 중요한 개념 중 하나
  • 재귀 호출을 사용하면 복잡한 문제도 매우 간단하게 논리적으로 접근하여 표현할 수 있습니다.

 

 

 

 

> 메서드 안에서 자기 자신을 다시 호출하는 것

> 메서드를 호출하면  스택 메모리에 계속 쌓인다.

> 메서드 실행 끝나면 없어짐

> 리턴해서 돌아가고 리턴해서 돌아가고

> 증감식 필요

 

 


 

 

1-1 : 함수란?

  • 하나의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합입니다.
  • C 프로그램은 이러한 함수들로 구성되며, 포함된 함수들을 사용하여 프로그램의 목적을 달성하게 됩니다.

 

 


 

 

1-2 : 재귀호출 예시 

  • 재귀 호출을 중단하도록 조건이 변경될 명령문을 반드시 포함하여야 한다.
  • 특정 조건이 되면 재귀 호출 안 하게 만들고 싶다. - if문으로 작성해 보았다.

 

 

 

- 입력받은 숫자부터 10까지 출력하는 재귀 함수 -

 

 

 

 

 

 


 

 

 

 

 

2. 시간 복잡도 ( Time Complexity )

  • 알고리즘이 문제를 해결하기 위한 시간(연산)의 횟수를 말한다.
  • 알고리즘을 평가할 때는 2가지를 사용한다.
  • 수행 시간에 해당하는 것이 시간 복잡도 Time Complexity
  • 메모리 사용량에 해당하는 것이 공간 복잡도 Space Complexity

 

 

 

 

2-1 : 빅-오 표기법(Big-O)이란?

 

연산 횟수를 카운팅 할 때는 3가지를 사용한다.

  • 최선의 경우 Best Case
  • 최악의 경우 Worst Case
  • 평균적인 경우 Average Case

 

 

 

알고리즘이 복잡해질수록 평균적인 경우는 구하기가 매우 어려워 지므로 

 

알고리즘성능을 파악할 때는 최악의 경우로 판단한다.

 

이 때 최악의 경우를 계산하는 방식을 빅-오(Big-O) 표기법이라고 한다.

 

 


 

 

 

2-2 : 빅-오 표기법 

  • O(1) (Constant)
  • 프로그램에서 1라인이 실행되는 경우, 1이라고 표현

 

  • O(log₂ n) (Logarithmic)
    입력 데이터의 크기가 커질수록 처리 시간이 로그(log: 지수 함수의 역함수) 만큼 짧아지는 경우, 이진 탐색이 대표적이며, 재귀가 순기능으로 이루어지는 경우도 해당된다.

 

  • O(n) (Linear)
    입력 데이터의 크기에 비례해 처리 시간이 증가할 경우, 1차원 for문 즉, 반복문이 N번만큼 반복할 경우

 

  • O(n log₂ n) (Linear-Logarithmic)
    데이터가 많아질수록 처리시간이 로그(log) 배만큼 더 늘어나는 알고리즘, 정렬 알고리즘 중 병합 정렬, 퀵 정렬이 대표적

 

  • O(n²) (quadratic)
    데이터가 많아질수록 처리시간이 급수적으로 늘어나는 경우, 이중 루프가 대표적

 

  • O(2ⁿ) (Exponential)
    데이터량이 많아질수록 처리시간이 기하급수적으로 늘어나는 경우, 피보나치 수열과 재귀가 역기능을 할 경우가 대표적

 


 

 

#  n이란 입력되는 데이터를 의미

  • n 자리에 1~10 만 올 수 있다고 한다면
  • 시간 복잡도가 n인 경우에는 – 운이 좋으면 1번에 끝낼 수도 있고, 나쁘면 10번 만에 끝낼 수 있다.
  • 시간 복잡도가 n^2인 경우에는 – 운이 좋으면 1번에 끝낼 수도 있고, 나쁘면 100번 만에 끝낼 수 있다.
  • 1~1000 사이의 숫자가 온다고 제한을 준다면 --- 중첩 반복문 써도 상관없다.
  • 1~10000 사이의 숫자가 온다고 제한을 준다면 --- 시간 복잡도 계산하여야 한다.