dydsj0920   5년 전

일단 주어진 에제들은 전부 나오구요..

예제도 만들어봤지만 틀린 예제를 찾지는 만들지 못했습니다..


아 그리고 궁금한게 있는데요!

https://gooddaytocode.blogspot...


여기 참고해서  TC 돌려보라고 하시는 내용이 많던데..여기서 어떻게

해당 문제의 TC를 찾는건가요? 궁금합니다.

bupjae   5년 전

BOJ 에서 #include "stdafx.h" 같은 걸 쓰면 당장 컴파일 에러를 받습니다만......

자신이 제출하신 코드를 다시 한 번 확인하시고 올려주세요.

bupjae   5년 전

게다가 이 프로그램은 "디버그 목적"으로 매 초마다 지렁이의 현재 상태를 출력하는 걸로 보입니다.

문제에서 요구하지 않은 데이터를 출력하면 당연히 "틀렸습니다"를 받습니다.

dydsj0920   5년 전

@bupjae 네..아이고 실수가 좀 있었습니다. 헷갈리지 않게 디버그 목적의 코드는 전부 제거 하였구요 stdafx.h도 전부 제거 하였습니다.

근데도 틀렸습니다를 받았습니다. 수정된 코드가 정확히 제가 제출후에 틀렸다고 받은 내용의 코드입니다.

bupjae   5년 전

go 함수에서 else 루트를 탔을 때 반환값이 없습니다.

dydsj0920   5년 전

@bupjae 와 정말 그렇네요...저는 개인적으로 else에서는 return 문이 없어도 된다고 생각했는데..왜그런건가요?

else에서 return으로 재귀함수 호출해주니 성공 했습니다. 근데 이유가 뭔가요? 저는 처음 if문(BaseValue)에만 특정 조건으로 r,c 값이 걸리기만 하면

모든 상황에서 return된다고 생각했는데요...재귀 함수의 이론상 저런 구조에서는 반드시 else문에도 return 문이 필요하다는 개념적인 이유인가요?

저렇게 return문을 else에서 안써주면 어떤 상황이 발생하는거죠?

bupjae   5년 전

이 문제는 재귀호출과 전혀 관련없는 문제입니다.

예를 들어 어떤 함수를 int go(int r, int c, int dir, int sec, int i) 로 선언했다면, 이 함수는 정수값 하나를 반환하겠다고 "약속"한 겁니다.

95번째 줄에서는 go 함수가 반환한 값을 받아서 그걸 ans 에 넣으려고 하겠죠.

그런데 이런 약속이 깨지고, go 함수가 아무 값도 반환하지 않고 그냥 끝나버리면, ans 에는 어떤 값이 들어갈까요?

다음 프로그램을 실행했을 때, 모니터에는 과연 어떤 값이 출력될까요?

dydsj0920   5년 전

아 네..기본적인 문법은 무슨 말씀 하시는지 알겠습니다(함수의 반환형). 제가 Base Value만을 통해서 return을 하겠다는 생각을 가지면 안된다고 이해하면 될까요?

왜냐하면 위에서 주신 예제는 단순히  int형 함수에서 반환값이 없을때 출력할  수 없는 문제인것 같구요..

제가 이 코드를 알려주신대로 수정하기 전까지는 모든 값이 BaseValue로 점점 수렴하기 때문에 결국 BaseValue에 도달하면 어떤 상황이든 반드시 return은 적어도 한번 이루어진다고

생각했거든요..근데 그 개념이 뭔가 오류가 있었던것 같네요. 제가 생각한것이 혹시 잘못된 생각이라면 계속해서 답변해주시면 감사하겠습니다.


djm03178   5년 전

a라는 함수가 b라는 함수를 호출하고, 이 함수가 x라는 값을 리턴한 건 a에게 되돌아갑니다. 하지만 a가 아무것도 리턴하지 않는다고 해서 자동으로 b가 리턴한 값을 리턴해주지는 않습니다.

재귀호출도 마찬가지입니다. main이 go를 호출한 것과 go가 go를 호출한 것은 위의 a, b 함수만큼 서로 전혀 다른 호출입니다. 재귀호출된 go가 무슨 값을 반환했다고 해서 그 go를 호출한 go가 알아서 그 값을 또 반환해준다는 보장은 어디에도 없습니다.

dydsj0920   5년 전

@djm03178아 네 이해됐습니다. 설명해주셔서 감사합니다.

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