[JavaScript]Recursive Functions (재귀함수)

M_yeon·2022년 10월 22일
0

javascript

목록 보기
10/15
post-thumbnail

재귀함수

함수가 자기 자신을 호출하는 것을 재귀호출(recursive call)이라고 한다.
재귀함수는 자기 자신을 호출하는 행위, 즉 재귀호출을 수행하는 함수를 말한다.

재귀함수는 반복되는 처리를 위해 사용한다. 예를 들어, 10부터 0까지 출력하는 함수를 for문을 이용하지말고 재귀함수를 사용한다면

function count(n) {
	if( n < 0) return;
    count(n - 1);
}
count(10)

이런식으로 본인 스스로가 0보다 작아질때까지 호출하고 실행하고를 반복하다가 중간에 0이 되면 return이 된다.

재귀함수는 자신을 무한 호출하기 때문에 재귀를 멈출 수 있는 탈출 조건을 무조건 만들어야합니다. 탈출 조건을 만들지 않았을때는 주한 호출되고 스택오버플로에러가 발생한다고 합니다~

저는 지금 for와 재귀함수의 차이점, 사용용도가 어떻게 되는지 궁금한데요
우선 재귀함수를 사용하는데에 바람직한건 직관적으로 이해하기 쉬울때만 한정적으로 사용하는것이 바람직하다고 하네요.

재귀함수와 for 문 (반복문) 의 차이

  1. 메모리
  • 재귀함수는 함수를 반복적으로 호출하기 때문에 스택 메모리를 사용한다. (스택 오버플로우가 발생할 수 있다. )
    반면 반복문은 메모리 힙을 사용한다.
  1. 코드길이
  • 재귀함수를 사용하면 반복문에 비해 코드수를 줄일 수 있다.

반복문(Iteration) :
기본 : 일련의 명령을 반복적으로 실행할 수 있다
체재 : 반복에는 초기화, 조건, 루프 내의 명령문 실행 및 제어 변수 업데이트가 포함
종료 : 특정 조건에 도달 할 때까지 반복적으로 실행
조건 : 반복문의 제어 조건이 참이라면 무한 반복이 발생
무한반복 : 무한 루프는 CPU 사이클을 반복적으로 사용
스택 메모리 : 스택 메모리를 사용하지 않음
속도 : 빠른 실행
가독성 : 코드 길이를 더 길게 만들고 변수가 많아 가독성이 떨어짐
재귀함수(Recursion)
기본 : 함수 자체를 호출 한다
체재 : 기본적으로 종료 조건만 지정 한다 (조건이 추가 될 수도 있음)
종료 : 조건부 문은 함수 호출 본문에 포함되어 재귀 호출을 실행하지 않고 함수를 강제로 반환한다
조건 : 기본적으로 조건에 수렴하지 않으면 무한 재귀가 발생한다
무한반복 : 무한 재귀는 스택 오버플로우를 일으킴
스택 메모리 : 스택 메모리는 함수가 호출 될 때마다 새 로컬 변수와 매개 변수 집합을 저장하는데 사용
속도 : 느린 실행
가독성 : 코드 길이와 변수가 적어 가독성이 높아짐


0개의 댓글