코드잇 강의를 통해 알고리즘에 대해 공부하며 배운 내용들을 기록한 글입니다.
파라미터로 정수값 n
을 받고 n
의 각 자릿수의 합을 리턴해 주는 재귀 함수 sum_digits
를 작성해라!
단, 반복문 사용은 안 된다!
# n의 각 자릿수의 합을 리턴
def sum_digits(n):
# 여기에 코드를 작성하세요
# 테스트 코드
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
14
15
16
11
20
# n의 각 자릿수의 합을 리턴
def sum_digits(n):
if n < 10:
return n
else:
return sum_digits(n//10) + n%10
# 테스트 코드
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
나는 우선 10이하의 숫자의 출력값은 무조건 그 숫자 자체이므로,
if문을 이용하여 해당 경우에는 n
을 그대로 반환하도록 하였다.
def sum_digits(n):
if n < 10:
return n
그리고 이제 n
이 10이상일 경우를 고려해야 하는데, 재귀함수 만으로 n
의 자릿수를 파악하는 방법이 잘 떠오르지가 않았다.
대신에, 자릿수를 하나씩 줄여가는 방법을 생각해냈다.
n
은 10보다 작지 않는 이상, 항상 10으르 나눌 수 있기 때문에 "n%10"을 통해서 1의 자리를 구하고, 그보다 윗자리의 수는 10으로 나눈 값을 파라미터로 sum_digits
함수를 다시 호출하면 된다.
else:
return sum_digits(n//10) + n%10
예를 들어, 22541같은 경우 sum_digit(2254) + 1
을 리턴하게 되는 것이고,
sum_digit(2254)
는 다시 함수를 호출해, sum_digit(225) + 4
를 리턴하며 n
이 한 자리 수가 될 때까지 반복 될 것이다.