Kim Seon Deok
chapter 5 - 1. 재귀 알고리즘 본문
재귀 : 어떠한 이벤트에서 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의되는 경우
<팩토리얼>
양의 정수를 순서대로 곱한다 = 순차곱셈 = math.factorial()함수
factorial()함수는 n-1팩토리얼값을 구하기 위해 자신과 똑같은 factorial()함수를 또 호출
재귀 호출 : 자기 자신과 똑같은 함수를 호출
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 양의 정수 n의 팩토리얼 구하기
def factorial(n:int) -> int:
"""양의 정수 n의 팩토리얼값을 재귀적으로 구함"""
if n > 0:
return n * factorial(n-1)
else:
return 1
if __name__ == '__main__':
n = int(input('출력할 팩토리얼값을 입력하세요.: '))
print(f'{n}의 팩토리얼은 {factorial(n)}입니다.')
|
cs |
직접 재귀 : 자기 자신과 똑같은 함수 호출
간접 재귀 : a()가 b()를 호출하고 다시 b()가 a()를 호출
<유클리드 호제법>
두 정숫값의 최대 공약수를 구하는 프로그램 = math.gcd()함수
-직사각형에서 짧은 변의 길이를 한 변으로하는 정사각형으로 가득 채움
-남은 직사각형에서도 같은 작업을 반복
-정사각형으로만 구성되었을 때 가장 작은 정사각형의 변의 길이가 최대공약수이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 유클리드 호제법으로 최대 공약수 구하기
def gcd(x: int,y: int) ->int:
"""정숫값 x와 y의 최대 공약수를 반환"""
if y == 0:
return x
else:
return gcd(y, x % y)
if __name__ == '___main__':
print('두 정숫값의 최대 공약수를 구합니다.')
x = int(input('첫 번째 정숫값을 입력하세요: '))
y = int(input('두 번재 정숫값을 입력하세요: '))
print(f'두 정숫값의 최대 공약수는 {gcd(x,y)}입니다.')
|
cs |
'python > Data Structure' 카테고리의 다른 글
chapter 6 -3 단순 선택 정렬, 6 - 4 단순 삽입 정렬, 6 - 5 셸 정렬 (0) | 2022.01.22 |
---|---|
chapter 6-1 & 2 정렬 알고리즘, 버블 정렬 (0) | 2022.01.21 |
chapter 5 - 2. 재귀 알고리즘 분석 (0) | 2022.01.20 |
chapter 4-2. 큐 (0) | 2022.01.20 |
chapter 4-1. 스택 & 덱 (0) | 2022.01.18 |
Comments