이채야채 2021. 12. 9. 16:03

재귀..재귀로 풀면 될것같아서 재귀로 실행했다.

 

그치만. 계속 내 답은 0을 토해낸다.

function solution(num) {
    let count = 0;
    
    if(num ===1){
        return count;
    }
    if(count>=500){
        return -1
    }
    
    if(num %2 === 0){
       num = num /2
        count ++
    }else if(num%2 === 1){
        num = (num * 3) + 1
        count ++
    } 
    
    return solution(num)
}

이코드의 문제점은? let count = 0이기에. 계속해서 count = 0이되어 설령 계산이 잘되었다해서 return 값은 0이 될수밖에없다.

 

다시 도전해보자.

 

1.  while문 풀이

function solution(num) {
    let count = 0;
    while(num !==1){
        if(count >= 500){
            return -1
        }
        num%2 === 0 ? num = num/2 : num = (num*3)+1
         count++
}
    return count;
}

2. 재귀 2차 실패

 

function solution(num) {
    function recursive(input,count){
        if(count>=500) return -1
        if(input === 1) return count;
        if(input%2 === 0) return  recursive(input/2,count++)
        else return  recursive (input*3+1, count++)
    }
    return  recursive(num,0)
}

무슨문제였고 하니.. count ++ 의 문제였다.

 

function solution(num) {
    function recursive(input,count){
        if(count>=500) return -1
        if(input === 1) return count;
        if(input%2 === 0) return  recursive(input/2,++count)
        else return  recursive (input*3+1, ++count)
    }
    return  recursive(num,0)
}

count++ 와 ++count 의 차이점?

 

count ++ 는 실행이 된후에 증가.

++count는 증가시켜준후에 실행.

 

count ++ 를 하게되면 계속 증가되지않은 0의 값이 들어가서 문제가되었던것.

 

 

오늘또 지식을 획득했습니다!

ㅜㅜ 오늘도 Happy coding!