언제 복사본을 만들고 언제 복원을 하는지 잘 모르겠지만,
재귀함수 들어가면 복사하고, 리턴할때 복원하다고 가정해보겠습니다.
먼저, 전역 변수는 전체 프로세스에서 하나만 존재하는 거고,
지역변수는 재귀함수에서는 들어갈때 마다 새로 생성되고 별도로 저장됩니다.
1. 전역변수일 경우,
한 depth 들어갈때(Depth1) 복사본을 저장합니다. (데이터가 map1이라고 하겠습니다.)
다음 depth 들어갈때(Depth2) 또 복사본을 저장하고 (map2) 나올때 복원하면 전역변수에 저장된 map2가 복원됩니다.
depth1으로 나와서 다시 return 될때에는 전역변수의 값으로 복원할텐데 이미 Depth2에서 map2로 덮어써졌기 때문에
다시 복원된 결과가 map2가 됩니다.
2. 지역변수 일 경우,
depth1, depth2에서 별도의 저장소가 생기고 거기에 map1, 2가 저장되고 이것으로 복원하니까 위와 같은 문제 없이
정상 복원이 가능합니다.
YUBgorithm 6년 전
이러한 것처럼 재귀가 풀려나올떄 배열을 초기화 되게 하려고 했는데요.
void copy(int(*arr)[MAX_SIZE], int(*arr2)[MAX_SIZE]) {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
arr[i][j] = arr2[i][j];
}
}
}
이 함수를 써서 재귀 돌기 전과 후에 선언해서 초기화 하려고 했습니다.
1.전역변수에 복사본 배열 copy_map[Max_size][Max_size] 선언!!
dfs가 return될때 배열을 그 전 상태로 돌려놓지 않고 값을 덮어버린 상태로 유지됨
2. 전역에 선언한 복사본 배열을 지우고 dfs배열 안에 copy_map[Max_size][Max_size] 선언!!
dfs가 탈출할때 정확하게 값을 return시켜줬습니다. 어떠한 이유로 정확히 값이 return되었을까요?
'주소값'에 따라 배열을 정확히 return한 걸까요?
어떠한 이유로 값을 제대로 전달해 올수 있었는지 궁금합니다.