
1. 팩토리얼 구현
def factorial(n):
# base case: 재귀 함수가 더 이상 호출되지 않도록 하는 특정 조건
# 전단받은 매개변수 값이 특정 값에 도달하면 함수가 호출되는 것을 막아줌
if n<=0: #1 : 0!일 때 1 반환
return 1
return n*factorial(n-1)
if __name__ == "__main__":
for i in range(1,6):
print(factorial(i)) #2
2. 스택 프레임 (stack frame)
def add_two(a,b):
c = a + b #4: 지역변수 c가 저장됨
return c #5: 함수 종료시 스택 프레임 소멸
a = 10 # 1
b = 20 #2
result = add_two(a,b) #3: 함수 호출시 스택 프레임 생성
print(result)
3.순열 (permutation)
def permutation(arr,start):
# base case
## start가 집합의 마지막 원소에 도달했을 때 섞을 다른 원소가 없으므로 완성된 순열을 출력함
if len(arr)-1 == start:
print(arr)
return
# for in range
## 인수 1개: 시작 숫자를 지정해 주지 않으면 range 함수는 0부터 시작함.
## 인수 2개: 시작 숫자와 끝 숫자를 나타냄. 단, 끝 숫자는 해당 범위에 포함되지 않음.
for idx in range(start ,len(arr)): # idx로 집합의 모든 원소를 순회하면서 start와 idx의 원소를 바꿈
arr[start],arr[idx] = arr[idx],arr[start]
permutation(arr,start+1) #재귀 함수 호출
arr[start],arr[idx] = arr[idx],arr[start] # 자신의 스택 프레임으로 돌아온 경우 이전에 바꾸어 놓았던 원소를 원래대로 돌려놓음
if __name__ == "__main__":
arr=[1,2,3]
permutation(arr,0)