재귀(Recursion)은 어떠한 것을 정의할 때 자기 자신을 참조하는 것을 뜻한다.
재귀 함수는 바로 자기 자신을 호출하는 함수
재귀함수를 사용하는 이유
-> 재귀 함수를 이용해서 간결하고 효율성 있는 코드 작성 가능
카운트다운 코드(재귀함수)
# 재귀함수
# 재귀함수를 무한번 반복하게 만들면 에러 남
# 탈출 조건이 있어야 한다.
def count_down(number):
if number < 0:
return
print(number) # number를 출력하고
count_down(number - 1) # count_down 함수를 number - 1 인자를 주고 다시 호출한다!
count_down(60)
팩토리얼은 1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 의미합니다.
예를 들면 아래와 같습니다!
3! 은 3 2 1 = 6,
4! 는 4 3 2 1 = 4 3! = 24
즉,
Factorial(n) = n Factorial(n - 1)
Factorial(n - 1) = (n - 1) Factorial(n - 2)
....
Factorial(1) = 1
의 구조입니다.
반복되는 구조라서, 재귀적으로 쓸 수 있다.
Factorial(n) = n Factorial(n - 1)
Factorial(n - 1) = (n - 1) Factorial(n - 2)
....
Factorial(1) = 1
이므로, 이를 코드화 시키면 다음과 같다.
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
print(factorial(5))
# 5 * 4 * 3 * 2 * 1
120
회문은 똑바로 읽으나 거꾸로 읽으나 똑같은 단어나 문장을 의미
회문검사 일반적인 방법
input = "abcba"
def is_palindrome(string):
n = len(string)
for i in range(n):
if string[i] != string[n - 1 - i]: #문자열 맨 앞과 뒤가 같은지 검사
return False
# 마지막까지 False가 반환이 안되었으면
return True
print(is_palindrome(input))
재귀함수 방법
문제가 축소되는 경향일 때
input = "abcba"
def is_palindrome(string):
# 한 글자 이하면 true
if len(string) <= 1:
return True
# 앞뒤가 다르면 false
if string[0] != string[-1]:
return False
return is_palindrome(string[1:-1])
print(is_palindrome(input))