[CodeKata] 문자열 뒤집기 (Recursion - 재귀)

임창현·2022년 11월 30일
0

CodeKata

목록 보기
4/4
post-thumbnail

Quiz!

재귀(Recursion)

재귀를 사용해서 문제를 풀어주세요.

str 이라는 'string'을 넘겨주면 글자순서를 바꿔서 return해주세요.
reverse 메서드 사용은 당연히 금지입니다!

input: 'hello'
output: 'olleh'

힌트

함수의 return에 string을 붙여서 사용하는 것

function getName(name) {
  return name;
}

console.log(getName('김')+'님');

풀이

const reverseString = str => {
  // 여기에 코드를 입력해주세요.
  if(str.length == 1){
    return str;
  }
  return str[str.length-1] + reverseString(str.slice(0,str.length-1))
}

배운점

재귀함수

함수가 자신을 다시 호출하는 구조로 만들어진 함수이다. 재귀함수는 종료조건이 있어야 하며, 종료조건을 설정해주지 않으면 무한 반복을 하게된다. 재귀함수로 작성이 되는 코드는 반복문으로도 작성할 수 있다.

반복문 문자열 뒤집기 예시

function strReverse(str) {
    if (str.length == 1) {
        return str //종료 조건
    }
    return str[str.length-1] + strReverse(str.slice(0, str.length-1)); // 순서 더하는 순서 바꾸면 정순
}
console.log(strReverse('bakjeongin')); //nignoejkab

// strReverse(str)          str[str.length-1] + strReverse(str.slice(0, str.length-1)
// strReverse('bakjeongin') str[9] + strReverse(str.slice(0, 9) / 'n' + 'ignoejkab' -> nignoejkab
// strReverse('bakjeongi') str[8] + strReverse(str.slice(0, 8) / 'i' + 'gnoejkab' -> ignoejkab
// strReverse('bakjeong') str[7] + strReverse(str.slice(0, 7) / 'g' + 'noejkab' -> gnoejkab
// strReverse('bakjeon') str[6] + strReverse(str.slice(0, 6) / 'n' + 'oejkab' -> noejkab
// strReverse('bakjeo') str[5] + strReverse(str.slice(0, 5) / 'o' + 'ejkab' -> oejkab
// strReverse('bakje') str[4] + strReverse(str.slice(0, 4) / 'e' + 'jkab' -> ejkab
// strReverse('bakj') str[3] + strReverse(str.slice(0, 3) / 'j' + 'kab' -> jkab
// strReverse('bak') str[2] + strReverse(str.slice(0, 2) / 'k' + 'ab' -> kab
// strReverse('ba') str[1] + strReverse(str.slice(0, 1) / 'a' + 'b' -> ab 
// strReverse('b') str[0] + strReverse(str.slice(0, 0) / 'b'

ref : https://velog.io/@jeongin/Javascript-%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98

profile
Hi there 👋 i'm backend developer

0개의 댓글