[codewar] 미로 찾기 알고리즘

김린네·2022년 4월 20일
0

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 함수를 쓰는것과 안쓰는 것은
차이 가 없지만.. 그래도 나는 헷갈리니까 써봤더니 결과는 똑같이 나왓다.!!

함수를 마친다!!에 중점으로 생각해야된다.

*/

profile
디자인 > https://dribbble.com/jongpil_77 코딩 > https://www.codewars.com/users/bikijjang

0개의 댓글