reenact   3년 전

필독 공지사항도 다 읽어보고 Code::Block에서 실행도 계속 해보고 했는데 런타임에러가 나오네요.. 오류 찾아주시면 감사하겠습니다.

dldyddlwl   3년 전

void func(int x, int y, int size) 함수를 봅시다.

재귀함수의 경우, 끝내는 조건이 있어야 무한루프를 돌지 않겠죠?


그렇다면, 이 함수에서 재귀를 끝내는 조건은 size == 3 이어야 합니다. 이 점을 생각하고 넘어가봅시다.

한번 N을 10이라고 생각해봅시다. 그렇다면 func(10-1,0,10) 이 되겠죠. 그리고 다음 호출은 func(... , 5 ), 그 다음 func(...,2 ), func(..., 1), func(..., 0) 이 됩니다.

그렇다면 이 func(...,0) 은 탈출하지 못한채 계속 또 다른 func(...,0)을 호출하게 됩니다. 

이 때문에, 스택 오버플로우 런타임에러가 발생하였습니다.

reenact   3년 전

해결했습니다! 감사합니다.

dldyddlwl   3년 전

아;; 정말 죄송합니다. 조건을 못봤네요.

N = 24로, 한 줄씩 돌려다보니까 x가 음수가 되는 경우가 나오네요. 그러다보니, size == 3 인 순간에 if 문 안으로 들어가서,

액세스위반이 뜨더군요.

func ( 23, 0 , 24 ) 가 func ( 0, 23, 12 )를 호출하고, func ( -6,  29 , 6 ) , 그것이 다시 func ( 29, -6 , 3) 을 호출하게 되면, 액세스 위반이 됩니다.

reenact   3년 전

이해했습니다 설명 감사합니다.

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