재귀 용법은 쉽게 말해서 팩토리얼이라고 생각하면 된다. 함수의 반환값이 함수인 경우
5! = 5 x 4 x 3 x 2 x 1
6! = 6 x 5 x 3 x 2 x 1 = 6 x 5! = 6 x 5 x 4!
n! = n x (n-1) x (n-2) x (n-3)! = n x (n-1)!
이것을 코드로 표현해보면 다음과 같다.
def reCal(num):
if num <= 1:
return 1
return num * reCal(num-1)
이렇게 함수에서 함수를 리턴해저 반환해주는 것이 재귀 용법이고 각각의 함수들은 스택처럼 쌓여있어 차례대로 반환값이 들어오면 계산을 마친다.
스택 처럼 쌓여 반환 값이 들어오면 쌓인 스택대로 순서대로 연산되어 반환된다.
재귀 용법을 사용하여 회문 체크를 하는 예제를 만들어보자(회문은 거꾸로 읽어도 같은것: 스위스 기러기)
def checkRev(data):
if len(data) <= 1:
return True
if data[0] == data[-1]:
return checkRev(data[1:-1])
else:
return False
def reCal(num):
if num <= 1:
return 1
return num * reCal(num-1)