따로 문제에 대한 것은 요약하겠다. 단지 재귀함수를 이용해서 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을 출력할 필요가 없기 때문에 종료한다.