재귀함수 2

재귀 함수와 메모리 & 꼬리 재귀

재귀 함수와 메모리 사용량 간의 관계 함수를 호출하면 함수의 매개변수, 지역변수, 리턴 값, 함수 종료 후 돌아가는 위치 등이 스텍 메모리에 저장된다. 따라서, 재귀함수는 함수를 반복적으로 호출하는 것은 스텍에 메모리가 쌓여 스텍오버플로우를 일으킬 수 있다. 이 문제를 해결하는 방법이 꼬리 재귀이다. 꼬리 재귀 꼬리 재귀는 기존의 재귀 함수의 메모리 사용량 문제를 해결할 수 있는 방법이다. 꼬리 재귀란, 재귀 호출이 끝난 후 현재 함수에서 추가 연산을 요구하지 않는 재귀의 형태이다. 이는 컴파일러가 선형으로 처리하도록 알고리즘을 바꿔서 스택을 재사용 가능하게 한다. 단, 컴파일러가 꼬리 재귀 최적화를 지원해야 한다. 일반적 재귀 함수 function factorial(num){ if(num === 1){..

[자료구조/ 알고리즘] 재귀: 재귀 함수 / TIL 22일차

재귀 어떤 문제를 해결할 때, 동일한 구조의 더 작은 문제를 해결함으로써 주어진 문제를 해결하는 방법을 재귀(recursion)라고 합니다. 재귀 함수의 입력값과 출력값 정의하기 재귀 함수를 통해 풀고자 하는 문제, 즉 도달하고자 하는 목표를 정의하는 데 도움이 된다. 재귀적으로 사고하는 데에 가장 먼저 해야 할 일은 문제를 가장 추상적으로 또는, 가장 단순하게 정의하는 것이다. 문제를 쪼개고 경우의 수를 나누기 주어진 문제를 어떻게 쪼갤지 기준을 정하고, 정한 기준에 따라 문제를 더 큰 경우와 작은 경우로 구분할 수 있는지 확인한다. 일반적으로 입력값으로 이 기준을 정한다. 이때 중요한 관점은 입력값이나 문제의 순서와 크기다. 주어진 입력값 또는 문제 상황을 크기로 구분할 수 있거나, 순서를 명확하게 ..