1개의 댓글이 있습니다.
-
-
Being -
운영진 권한으로 글 형식을 수정하였으니 다음부터는 맞추어 올려주시길 바랍니다.
계산적으로 말해서 recursion과 iteration은 동등합니다. 많은 경우 재귀가 편한 이유는 우리가 call stack을 활용하여 순간의 맥락을 저장해 두었다가 함수가 되돌려지면 원래 상태를 복원할 수 있기 때문입니다. 그러나 call stack이 보통 이런 용도로 만들어진 것은 아니기 때문에 지정된 크기 이상으로 호출이 발생하면 stack overflow가 발생하는 것이죠.
그러면 어떻게 해결하면 되느냐?
- Call stack의 사이즈를 늘립니다. 이건 OS와 컴파일러에 따라 다릅니다.
- 스택과 재귀 함수 호출 방식을 직접 구현합니다.
특히 2번 방안의 경우 DFS 등의 알고리즘을 큰 그래프에서 구현할 때 call stack을 사용하면 쉽게 스택이 넘치기 때문에 주로 많이 사용합니다.
8년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
7041701
종만북을 읽고 재귀다이나믹으로 거의 대부분의 다이나믹문제를 풀어오다가
최근에 2문제가 내부적으로 스택오버플로우가 걸리는 일이 발생했습니다
문제1.
http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=950&sca=50&sfl=wr_subject&stx=%EA%B2%BD%EB%A1%9C&sop=and
제가짠 코드
문제2)
http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1761&sca=50&sfl=wr_subject&stx=%EC%A0%84%EA%B5%AC&sop=and
둘다 스택오버플로우를 발생시키는 코드인데,
여기서 궁금한점은, 진짜 어지간한 다이나믹은 다 재귀다이나믹으로 풀렸는데,
위와같은 문제는 return ret=cache 하기전에 또 재귀호출을 하거나,
내부적으로 cycle이 발생하는 경우같은데,,
저런 유형은 그럼 절대 재귀다이나믹으로 풀수 없는건가요??
(정말 오랫동안 심각하게 고민했는데, 도와주세요ㅠㅠ)
일단 두문제다 배열다이나믹으로 풀긴풀었으나,
위 문제유형에 대한 재귀다이나믹 풀이법을 알고싶습니다!!!
8년 전