재귀함수: recursion

요니·2022년 9월 28일
0
post-thumbnail

👩‍💻 배운것

재귀함수

  • recursive function
  • 문제를 쪼개서 생각하기
  1. 재귀함수의 입력값과 출력값 정의하기
  2. 문제를 쪼개고 경우의 수 생각하기
  3. 단순한 문제부터 해결하기
  4. 복잡한 문제 해결하기
  • thought process:
function recursive(input1, input2, ...){
	if (문제를 더이상 쪼갤 수 없는 경우){
    	return 단순한 문제의 해답;
    }
    return 더 작은 문제로 새롭게 정의된 문제;
}

👫 페어프로그래밍

  • 오늘 페어분은 대학생이신데 12시까지 대학 강의가 있어서 혼자 풀어보다가 1시에 만나기로 했다!
    어떻게 대학강의랑 부트캠프를 병행하시지..대단..

  • 나눔연산자 없이 홀수 찾기

function isOdd(num) {
  if (num === 0) {
    return false;
  } else if (num === 1) {
    return true;
  } else if (num<0){
    num = -num
  }
  return isOdd(num - 2);
}
  1. 0이면 짝수
  2. 1이면 홀수
  3. 음수면 양수로 만들어서 통과
  4. 숫자에서 계속 2를 빼면서 마지막 남은게 0인지 1인지 확인
  • arr.length 없이 배열 길이 리턴하기
function arrLength(arr) {
  // TODO: 여기에 코드를 작성합니다.
  if (arr.isEmpty()){
    return 0;
  }
  const tail = arr.slice(1)
  return 1 + arrLength(tail)

}
  1. 빈배열은 0 출력
  2. slice로 두번째부터 tail에 저장 (num+1 역할을 하는듯?)
  3. 계속 +1을 함
  4. 길이 출력
  • 제일 어려웠던 14번, 15번

    선물 상자에 대한 정보를 담은 배열과 문자열을 입력받아 조건에 맞는 선물이 있는지 여부를 리턴해야 합니다.
    입력
    인자 1 : giftBox
    문자열, 배열을 요소로 갖는 재귀적으로 정의된 배열 (입출력 예시 참고)
    문자열은 선물 상자에 들어있는 각 선물의 이름을 의미합니다.
    배열은 더 작은 선물 상자를 의미합니다.
    인자 2 : wish
    string 타입의 문자열
    출력
    boolean 타입을 리턴해야 합니다.

  • 여기서 한시간 썼다!!! 일단 말로 if문과 for문을 작성하면서 로직을 세웠고, 그 후에 에러가 뜨는 테스트케이스들을 하나씩 풀어서 대입해가며 디버깅했다. 근데 ㅋㅋㅋㅋ마지막에 발견한 오류는 문법사용,,,

function unpackGiftbox(giftBox, wish) {
  // TODO: 여기에 코드를 작성합니다.\
  if(wish == '')
    return false

  for(let i = 0; i<giftBox.length; i++){
    if(typeof(giftBox[i]) == 'string'){
      if(giftBox[i] === wish){
        return true
      }
    }
    else if(Array.isArray(giftBox[i])){
      if(unpackGiftbox(giftBox[i], wish)){
        return true
      }
    }
  }

  return false
}
  • 이렇게 했는데 계속 우리가 typeof === "string" 대신에 String 이라고 써서 오류가 난거였다... 그리고 array도 typeof === Array 이런식으로 썼어서 뭔가 이상해서 봤더니 배열인지 확인하려면 Array.isArray를 써야한다며? ㅎ
  • 아무튼 이런식으로 오류를 해결하는데 한시간을 쓰니 다음 문제가 쉬워졌다! 15번도 비슷하게 어려웠는데, 거의 테스트 한번에 해결

👍 후기

  • 노동요 들으면서 하기
  • 재귀함수,,어렵다어려워 코플릿 1-12까지는 그래도 풀었는데 13-15는 손도 못대겠는데요?!! 이제 차근차근 해봐야징
  • 그.. 연습해서 실력을 늘리는게 아니라 코딩 잘하는사람을 커비처럼 삼켜서 잘해지고싶다는 거 공감
  • 차근차근 디버깅해보면 못고칠게 없다
profile
개발자가 될래요

2개의 댓글

comment-user-thumbnail
2022년 9월 28일

커비 잼
비탈릭 부테린 삼켜야겠넵
노동요 커머셜에서 들었는데 아이폰인가?
ㅋㅋㅋ반갑

1개의 답글