chanp19933   1년 전

백준 강의 듣고 힌트를 얻어 문제를 풀어서 맞췄지만, 이해가 가지 않는 부분이 있어서 질문 드립니다. 

테스트 케이스는 문제의 예시 입력으로 하고 있습니다

ex)
6

10 20 10 30 20 50 

i012345
a[i]102010302050
d[i]121324
v[i]-10-1103

지금 궁금한게  7~12줄의 재귀함수인데요,

ans1의 매개변수로 3 - >1 -> 0 -> -1의 순서대로 들어갑니다. 

그럼 9번줄의 return에 의해 -1인 상태에서 이전 재귀함수로 돌아가는거까지 이해가 되는데요, 왜 호출한 3,1,0 step으로도 돌아가죠?

-1에서 이전 함수로 돌아가면 사실 return이 없는거나 마찬가지잖아요? 근데 순서대로 계속 돌아가더라고요..

return이 있을때만 돌아가는걸로 이해한 저로써는 이해가 안가서요..


심지어 9번줄을 삭제하면 ans1의 매개변수가 -1,0을 왔다갔다 하는데, return이 없으면 그냥 마지막 함수에서 그냥 끝나야되지 않나요?

제가 잘못 이해를 하고 있나요...

고수님들 도와주세요 ㅠ

djm03178   1년 전

"return이 있을때만 돌아가는걸로 이해한 저로써는 이해가 안가서요.."

여기서 이해를 잘못하고 계신 것 같습니다. return은 있으나 없으나 재귀함수의 동작에 아무런 영향을 주지 않습니다. 반환값이 없는 return은 그냥 아무 키워드 없이 함수를 종료하는 것과 100% 동일합니다.

chanp19933   1년 전

말씀하신 ' 반환값이 없는 return은 그냥 아무 키워드 없이 함수를 종료하는 것과 100% 동일합니다.'라고 하시면 실제로 원래 9번줄이 없어도 이전 재귀함수들로 계속 돌아가는다는 말씀이신거네요? 이해했습니다 감사합니다. 

근데 왜 9번줄을 주석처리하면 무한루프가 도는거죠.. 

ans1가 -1이면 배열인덱스가 -1이 되어서 프로그램이 그대로 끝내야되는걸로 알고 있는데 string을 찎어보니까 계쏙 ans1가 -1,0으로 번갈아 바뀌면서 함수가 도네요.

djm03178   1년 전

9번째 줄이 없으면 함수가 종료가 안 되니까 다음 줄을 실행해서 go 함수가 다시 호출되겠죠? v[-1]이라는 건 존재하지 않으니까 사실 무슨 일이 일어나도 이상하지 않은데, 여기에 우연히 0이란 값이 들어있으면 다시 0번으로 가고 거기서 다시 -1로 가고를 무한히 반복해서 재귀호출을 할 뿐입니다.

djm03178   1년 전

return이라는 게 별 게 아니고 그냥 '함수를 종료한다'는 의미입니다. 종료가 되어야 할 곳에서 종료를 시켜주기 위해서 넣은 것입니다.

chanp19933   1년 전

아 네 자세한 설명 감사합니다. 설명하신대로 이해하니 이제 마음이 많이 편안해지네요. 

추석에 코드 봐주느라고 고생 많으셨네요 ㅠ 

남은 명절 잘 쉬세요! 감사합니다.

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