코딩테스트 - 이진수 변환 (재귀)

김찬울·2021년 8월 29일
0

따로 문제에 대한 것은 요약하겠다. 단지 재귀함수를 이용해서 10진수의 수를 2진수로 출력하는 것이다. 대신 맨 앞자리가 0이면 안된다.

재귀함수

재귀 함수란 어떠한 함수가 자기자신(함수)을 호출하는 것이다.

def recusive():
	return recusive()

이런식이다.

근데 종료조건이 필요하다.

왜냐면 재귀함수는 최대 1000번만 돌 수 있고, 원하는 결과가 나온 뒤에는 멈출 필요가 있다.

바로

def count_recusive(count):
	if count == 10:
    	return 0
	return count + count_recusive(count + 1)

과 같이 종료조건을 정해주는 것이 일반적이다.

이진수 변환

2진수로 변환하는 것은 간단하다. 2로 나눈 나머지를 역순으로 정렬하면 된다.

num = input()

def factorial_recusive(num):
    if num == 0:
        return
    factorial_recusive(int(num) // 2)
    print(int(num) % 2, end='')

factorial_recusive(num)

이런 식이다.

여기서 디테일은 함수를 호출하면 해당 함수가 끝나야지만 그 다음 코드로 넘어간다. 즉, 재귀를 하면 맨 처음 호출한(가장 오래된) 함수보다 가장 최근에 호출한 함수를 먼저 끝낸다.
이로써 맨 처음 입력받은 num에 대해서 나눈 나머지를 출력하는 것이 가장 나중이다.

재귀때는 2로 나눈 몫을 집어넣고 (몫이 아니면 소수가 나와서 종료조건에 들어가기 힘듦)
num 이 0이라는 것인 2로나눈 몫이 0이니까 더이상 0을 출력할 필요가 없기 때문에 종료한다.

profile
코린코린이

0개의 댓글