deVSner

edabit - Find the Index (Part 2), return 미기입으로 인한 오류 본문

자료구조 및 알고리즘

edabit - Find the Index (Part 2), return 미기입으로 인한 오류

RudeofSun 2020. 4. 2. 16:55

 

 

Create a function that searches for the index of a given item in an array.
If the item is present, it should return the index, otherwise, it should return -1.

이런 재귀 함수 문제를 만났습니다.

가볍게 풀어볼까~ 하고 덤볐던 것이 화근이었죠

로직 자체는 생각해내는 데 오래 걸리지 않았습니다만,

다만,...알고리즘 문제 풀다가 평소엔 잘 되던 부분이, 갑자기 눈에 보이지도 않게 오류가 나 버린단 것이었습니다 

 

이번이 그랬습니다.

 

이번 알고리즘 해결 과정의 문제점은

 

'return 미기입' 이었습니다.

 

아래는 최초 작성 코드입니다.

function search(arr, item) {
  var count = 0;
  function indexF(a) {
    if (!a.includes(item) ) {
      console.log("여기?")
      return -1;
    }

    if (a[0] === item) {
      count += 1 ;
    } else {
      count += 1;
      indexF(a.slice(1));
    }
  }
  indexF(arr)
  return count;
}

 

if 문 사이사이에 return 이 없습니다....

재귀를 본격적으로 마스터하고 싶은 마음을 먹은 지 며칠 됐지만, 아직도 헷갈리기만 합니다.

 

저렇게 생각한 이유는, indexF(a.slice(1))을 함으로써, 

count가 외부함수에 저장이 된다고 생각했기 때문입니다.

console.log를 찍어가며, 디버깅을 한 끝에 제 생각이 틀렸단 것을 알게 되었습니다.

 

아래는 정답 코드입니다.

function search(arr, item) {
  var count = 0;
  function indexF(a) {
    if (!a.includes(item) ) {
      return -1;
    }

    if (a[0] === item) {
      return count;
    } else {
      count += 1;
      return indexF(a.slice(1));
    }
  }
  return indexF(arr);
}

이번 데브로그를 통해서 재귀함수에서도 return 으로 인한 값의 전달적인 부분에 더 신경써야 함을 느꼈습니다.

 

아직 재귀에서의 컴퓨팅적 사고가 부족하다고 판단이 되네요. 더 연습해야겠습니다.