재귀함수

송승찬·2020년 8월 30일
0

TIL

목록 보기
11/52
post-custom-banner

재귀함수 사용해보기

  • 재귀함수 : 자기 자신을 호출하는 함수
  • 알아둘 것
    재귀는 단순히 중첩된 함수 호출,
    모든 중첩된 함수에서 가장 내부에 중첩된 함수가 가장 먼저 실행되고 값을 반환한다.

2진수 바꾸기

  • While문 이용시

let number = 11; 2진수 변경시 1011
let result = "";
while (true) {
  //1이면 2진수 변환이 끝난 것,따라서 맨 처음에 확인
  if (number === 1) {
    result=1+result;
    break;
  }
  if (number % 2 === 1) {
    result = 1 + result;
  } else {
    result = 0 + result;
  }
  number = Math.floor(number / 2);
}
console.log(result); => 1011

실행 과정
number result number
 11     1     5
 5      11    2
 2      011   1
 1      1011 

이렇게도 해보았다.

let result = "";
while (true) {
  if (number % 2 ===1) {
    result = '1'+result;
  } else {
    result ='0'+result;
  }
  number  = Math.floor(number/2);
  if (number===1) {
    result='1'+result;
    break;
  }
}
console.log(result)
  • 재귀함수 이용시

const 이진법 = (숫자) => {
  if (숫자===1)  return '1';
  return 이진법(Math.floor(숫자/2))+String(숫자%2);  
}

console.log(이진법(11)); //1011

실행        	return
이진법(11)    이진법(5)+1  // 1011
이진법(5)     이진법(2)+1  // 101
이진법(2)     이진법(1)+0  // 10
이진법(1)       1
* 주의 String()안 써주면 1+0+1+1이 되서 3을 반환!

재귀함수로 주어진 문자열 거꾸로 만들기

let target = "seoul";

const 문자열거꾸로만들기1 = (문자) => {
  if (문자.length === 1) return 문자;
  return (
    문자[문자.length - 1] + 문자열거꾸로만들기1(문자.slice(0, 문자.length - 1))
  );
};
console.log(문자열거꾸로만들기1(target)); // luoes

let target2 = "seoul";
const 문자열거꾸로만들기2 = (문자) => {
  if (문자.length === 1) return 문자;
  let arr = target2.split("");
  let end = arr.pop(); // 맨 마지막 문자
  target2 = arr.join(""); // 마지막 문자가 빠진 문자열을 반환
  return end + 문자열거꾸로만들기2(target2);
};
console.log(문자열거꾸로만들기2(target2)); // luoes

피보나치 수열

  • 수열의 인덱스:1 2 3 4 5 6 7 8
    수열의 값 :1 1 2 3 5 8 13 21
const fb = (fiboIndex) =>{
 if (fiboIndex===1 || fiboIndex===2) return 1;
 return fb(fiboIndex-1)+fb(fiboIndex-2);
}

console.log(fb(8)); //21
profile
superfly
post-custom-banner

0개의 댓글