작성
·
147
답변 1
0
안녕하세요 chan님 ㅎㅎ
void dfs함수에서 return이 두개가 있는데 각각 return을 하면 다시 main함수의 dfs(0,0)직후로 넘어가지는건가요
>>
void go(int y,int x){
visited[y][x] = 1;
if(a[y][x] == 1){
v.push_back({y,x});
return;
}
for(int i=0; i<4; i++){
int ny = y + dy[i];
int nx = x + dx[i];
if(ny < 0 || ny >= n || nx < 0 || nx >= m || visited[ny][nx])continue;
go(ny,nx);
}
return;
}
여기서 return 이 두개가 있는데요.
상단 return : 기저사례를 나타냅니다. 만약 해당 부분에 요소가 1이라면 더이상 함수를 호출하지 않고 종료합니다.
하단 리턴 : 사실 아무 의미가 없습니다. void 타입은 아무것도 리턴하지 않음을 명시적으로 나타냅니다. 저기까지 도달한다는 의미는 기저사례에 안걸렸다는 의미로 저 for문이 동작하면서 아래의 dfs가 동작하게 된다는 의미입니다.
아니면 void dfs함수 내에 있는 if문의 return과 for문 바깥에 있는 return이 다른의미를 갖는건가요? void dfs함수 내의 return부분이 어디로 가는지 헷갈립니다.
>> return 은 똑같은 의미를 가집니다. return 은 함수를 종료시키면서 어떠한 값을 반환한다는 의미입니다.
int는 int타입을. ex) return 1;
void는 타입이 아닌 아무값도 아닌 것을 리턴하게 됩니다. ex) return;
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.