미새문지

반복문과 재귀함수 본문

공부 키워드/알고리즘 및 데이터 구조

반복문과 재귀함수

문미새 2024. 3. 27. 00:08
728x90

반복문(Loop)

반복문은 프로그래밍에서 특정 작업을 반복적으로 수행하기 위해 사용되는 제어문이다.

 

반복문 유형

for문

for (let i = 0; i < n; i++) {
	console.log(i);
}
  • 가장 일반적인 반복문 형태이며, 초기식, 조건식, 증감식으로 구성된다.
  • 초기식은 한 번만 실행되고, 조건식이 참인 동안 반복 실행 블록을 수행한 후 증감식을 실행한다.
  • for문은 주로 반복 횟수가 정해져 있을 때 유용하다.

 

while문

let i = 0;
while (true) {
	console.log(i);
    if(i == 10)
    	break;
}

 

  • 조건식이 참인 동안 반복 실행 블록을 수행한다.
  • 반복횟수가 정해져 있지 않고 특정 조건을 만족할 때까지 반복해야 할 때 사용한다.

 

do-while문

let i = 0;
do {
  console.log(i);
  i++;
} while (i < 5);
  • 먼저 반복 실행 블록을 수행한 후, 조건식을 평가한다.
  • 조건식이 참이면 다시 반복 실행 블록을 수행하며, 적어도 한 번은 반복 실행 블록이 실행되는 것이 보장된다.

 

반복문 특징

  • 조건식 : 조건식이 참인 동안 반복 실행 블록이 계속 실행된다. 조건식이 거짓이 되면 반복문을 탈출
  • 무한 루프 : 조건식이 항상 참일 경우(while문) 무한 루프에 빠질 수 있으므로 주의해야 한다.
  • 제어문 : 반복문 내부에서 break, continue 등의 제어문을 사용할 수 있다.
  • 중첩 반복문 : 반복문 내에 또 다른 반복문을 사용할 수 있다.(이중 for문)

반복문은 배열, 문자열 등의 자료구조를 순회하거나, 특정 연산을 반복적으로 수행할 때 활용된다.

효율적인 코드 작성을 위해 반복문의 조건식과 종료 조건을 잘 설정해줘야 한다.

 

재귀 함수(Recursion)

// 팩토리얼 재귀함수 예시
function factorial(n) {
// 기저 조건
  if (n === 0) {
    return 1;
  }
// 재귀 단계
  return n * factorial(n - 1);
}

 

재귀함수는 자기 자신을 호출하는 함수를 말하며, 이 개념은 함수가 문제를 해결하기 위해 자기 자신을 더 작은 문제로 분할하고, 이러한 작은 문제를 같은 방법으로 해결하는 방식에 기반을 두고 있다.

재귀는 많은 알고리즘과 데이터 구조, 특히 분할 정복 및 동적 계획법에 있어 핵심적인 기법 중 하나이다.

 

재귀함수의 구성 요소

  • 기저 조건(Base Case) : 재귀 호출을 멈추는 조건이며, 이는 무한 루프에 빠지지 않도록 하기 위해 필수적이다.
  • 재귀 단계(Recursive Case) : 함수가 자기 자신을 호출하는 부분. 이 때 문제의 크기를 줄여서 점점 기저 조건에 가까워지도록 해야 한다.

 

재귀함수 사용 시 주의사항

  • 기저 조건의 중요성 : 모든 재귀 호출은 결국 기저 조건에 도달해야 한다. 그렇지 않으면 함수는 무한히 자신을 호출할 것이며, 이는 스택 오버플로우 오류로 이어질 수 있다.
  • 성능 문제 : 재귀는 때로 반복문보다 더 많은 메모리를 사용하고 성능이 떨어질 수 있는데, 특히 깊은 재귀 호출은 스택 메모리를 많이 사용할 수 있어 주의해야 한다.
  • 꼬리 재귀 최적화 : 함수의 마지막 동작이 재귀 호출일 때, 현재 함수의 실행 컨텍스트를 재사용함으로써 메모리 사용량을 줄이는 기법이다.

재귀 함수는 잘 사용하면 편하지만 적절히 사용할 필요가 있으며, 때로는 반복문으로 대체할 수 있는 경우도 있기 때문에 문제의 유형과 요구사항을 잘 확인하여 적합한 접근 방식을 선택하는 것이 중요하다.

728x90

'공부 키워드 > 알고리즘 및 데이터 구조' 카테고리의 다른 글

스택(Stack), 큐(Queue)  (3) 2024.03.29
연결 리스트(Linked List)  (1) 2024.03.29
시간 복잡도(Big-oh Notaion)  (1) 2024.03.28
정렬 알고리즘  (3) 2024.03.27
배열과 문자열  (2) 2024.03.26