https://jihyehwang09.github.io/2019/01/20/recursion-maze/
재귀함수
극복기
그동안 많은 실습을 통해서 재귀 함수를 이해할려고 했지만 실패하고 말았다.!
그니까
0 -> 0 -> 0
여기서 에러가 났으니 전으로 돌아가고 싶은데 이런경우는 어떻게 해야되지?
다시 함수를 호출해서 다시 가야되는가?
라는 생각에 빠져서 그동안 재귀 함수의 개념적 논리를 등한시 했던거 같다.
나만의 언어로 재귀 함수 표현하기
0
l
0 < - 0 - > 0
ㅣ
0
인 상황에서 어떻게 나는 빠져 나올수 있을까?
여기 부분에서 나는 고민에 빠졌다.
결론적으로 말하면 전체 방향이 false 이여만 . 이 함수를 종료 시켜야되는데
어떻게 종료시키지?????? 그리고 종료 시킨후 어떻게 할것인가?
이생각을 했었다.
하지만 결론적으로 함수를 빠져나오게 하는것은 return 이라는것이고 이 return 을 했을때 !
함수 초반으로 가는것이 아닌! 내가 실행햇던 함수를 빠져 나간다는 개념으로 생각해야된다.
빠져나가면 나는 어디에 위치해? 이것도 쓸데 없는 생각이였다.
!!!!
트리의 구조를 생각해보면
2
1 3
-1
-2
2에서 실행해서 계속 쭈욱 가봐 그러면 -2를 발견하지? 그러면 너는 false 함수를 보내
-1에 도착한 친구는 이미 오른쪽 부분 함수를 썻으니..
( 오른쪽 이동 함수 ) x
지금 내가 갖고 있는 수
(왼쪽 이동 함수 ) <-
로 가봐 -> 근데 왼쪽도 없네?
이럴때 return 을 함수 밑에다가 호출해서 지금 이 함수는 .. 다 돌렸으나.. 답이 없는 함수로 나왔습니다.. 나가고 싶어요.. !!! 라는 것을 알려준다..!!!!
결국 !
계속 도는것을 알수있다..!!
```
const a = [
[0, 0, 0, 1],
[0, 1, 1, 0],
[0, 0, 0, 1],
[1, 1, 1, 0]
]
const maze = function (arr, y = 0, x = 0) {
if (y < 0 || x < 0 || x >= 4 || y >= 4) {
return false;
}
else if (x == 3 && y == 3) {
return true;
}
else if (arr[y][x] == 2 || arr[y][x] == 1) {
return false;
}
else {
console.log(arr, x, y)
arr[y][x] = 2;
if (maze(arr, y, x + 1) ||
maze(arr, y, x - 1) ||
maze(arr, y + 1, x) ||
maze(arr, y - 1, x)) {
return true;
}
arr[y][x] = 3;
return false;
}
}
console.log(maze(a));
여기 그림을 봐도..!! return 함수를 쓰는것과 안쓰는 것은
차이 가 없지만.. 그래도 나는 헷갈리니까 써봤더니 결과는 똑같이 나왓다.!!
함수를 마친다!!에 중점으로 생각해야된다.
*/