smgod   4년 전

DFS , BFS , 조합문제 등 코드를 짜다보면 재귀함수를 많이 사용하게되는데 재귀를 많이 호출하게되면 메모리초과가 발생하게됩니다.

하지만 이 메모리초과가 정확히 어느정도 수준까지 되었을때 메모리 초과가 발생하는지 궁금합니다.

물론 코드에따라 다 다르겠지만 혹시 대략적으로 설명해주실분 있나요 ??

아 그리고 혹시 nCr 문제 (조합문제)를 재귀아닌 반복문을 통해 구현할수도 있나요 ??(r이 몇개올지 모르는상황에서)

감사합니다 

scvhero   4년 전

결론부터 말하자면 언어 따라 다르고 코드 따라 다릅니다

자세한 설명은 스택 세그먼트, 콜 스택 등으로 검색해 보시고요

C언어 기준으로는 2MB정도로 알고 있네요

smgod   4년 전

저는 C++ 을 주로 사용하는데 혹시 2MB 라는 크기가 재귀함수를 호출해서 추가적인 변수를 사용했을경우  추가되는 크기인가요 아니면 재귀함수 호출시 생성되는 포인터에대한 크기인지 알 수 있을까요 ??

scvhero   4년 전

함수 return 시 복귀 주소, 함수 호출 시점의 레지스터 값, 함수 지역변수, 함수 인자 등 입니다

예를 들어 지역변수로 int a[100];를 선언하고 재귀 호출을 하게 되면 한번에 400B+a가 추가되게 됩니다

댓글을 작성하려면 로그인해야 합니다.