5강 재귀호출 팩토리얼(Python Algorithm 5 Factorial)
부제 : 알고리즘을 배우면서 파이썬 기초부터 RPG까지 정복
내용 : 초중고 또는 코딩 기초 입문자를 위한 누구나 따라 배울 수 있는 Python Algorithm 프로그램 기초 강의
파이썬을 통해 알고리즘도 배우고 기초 프로그램 문법도 배우고 수학도 배우면서 기초 코딩 교육을 배웁시다. 초보자도 아주 쉽게 배울 수 있도록 최대한 쉽게 설명을 할 것이며 따라하다 보면 어느덧 기초 과정을 마스터하면서 나중에 TRPG(Table-talk Role Playing Game 이라고 하는데 저는 그냥 Text Role Playing Game 즉 문자 타이핑으로 하는 역할 수행 게임 이라고 부르겠습니다.)를 구현하는 과정까지 해 보겠습니다. 교재 및 강의 자료는 네이퍼 카페 백년지계 에 파이썬 에서 닭치고 알고리즘 부분에도 있습니다. 이 시대의 패러다임 코딩 교육을 쉽게 접근하여 친밀한 생활의 코딩으로 배워 나갑시다. 함께 닭치고 아두이노도 같이 하시면 좋습니다.
구독 좋아요 댓글 많이 많이 해주세요.
[동영상강의]
5. 재귀호출-팩토리얼(factorial)
Microsoft Visual Studio 사용법
이제부터 코딩은 Microsoft Visual Studio를 사용합시다.
Microsoft Visual Studio 를 실행합니다.
파일 > 새로만들기 > 파일로 갑니다.
재귀호출(Recursive call)
재귀호출(Recursive call)은 함수가 자기 자신을 다시 호출하는 것을 말합니다.
알고리즘을 배우는데 매우 중요한 알고리즘이므로 자세히 배우도록 해서 꼭 정복하도록 합시다.
팩토리얼(factorial)
팩토리얼(factorial)이란 1부터 n 까지 연속한 정수의 곱을 말합니다.
고등학교 수학에서 배우지만 그렇게 어렵지 않으므로 수학도 배우면서 알고리즘도 배우도록 합시다.
중학교 때 확률 부분에서 5명이 5줄을 설 수 있는 방법을 구할 때 앞줄에 5명 중에 5명을 택해서 줄 세울 수 있으므로 맨 앞줄 5가지가 생길 수 있고 2째줄에서는 앞줄에 한명이 섰으므로 4명 남은 사람 중에서 택해서 줄 세울 수 있으므로 4가지 경우가 있고 이렇게 해서 줄 세우는 경우의 수는 $ 5 \times 4 \times 3 \times 2 \times 1 $이런식으로 배운 것이 기억이 날 것입니다.
$ 5 \times 4 \times 3 \times 2 \times 1 $ 을 5! (! : factorial 뜻, 5 팩토리얼 하고 읽습니다.)로 표기합니다.
$0! =1$ (0 팩토리얼은 그냥 외우세요.)
$1! = 1$
$2! = 2 \times 1$
$3! = 3 \times 2 \times 1 = 6$
$4! = 4 \times 3 \times 2 \times 1 = 24$
$ 5 \times 4 \times 3 \times 2 \times 1 =120$
$\cdots$
$n! = n \times (n-1) \times (n-2) \times (n-3) \times \cdots \times 4 \times 3 \times 2 \times 1$
Microsoft Visual Studio 사용법
이제부터 코딩은 Microsoft Visual Studio를 사용합시다.
Microsoft Visual Studio 를 실행합니다.
파일 > 새로만들기 > 파일로 갑니다.
python > 빈모듈 을 선택하시고 우측 하단에 있는 열기를 클릭합니다.
기본적으로 모듈2.py 가 열렸습니다.
우리가 작성할 RecursiveFactorial.py 로 저장하도록 합시다.
파일 > 다른 이름으로 선택한 항목 저장 을 클릭합니다.
자신이 만들어 놓은 폴더에 저장합니다.
파일명이 RecursiveFactorial.py 로 변경된 것을 볼 수 있습니다.
그렇게 어렵지 않죠? 사용하면 편안해집니다.
팩토리얼 구현하기
자 이제 본격적으로 코딩을 해 봅시다.
def recur_fact(n) 으로 함수명을 정한 다음 함수 안에 들어갈 내용들은 Tab 키로 한번 눌러서 공간을 띄웁니다.
파이썬에서는 이렇게 공간띄우기로 줄을 맞추는 것이 매우 중요합니다.
for 문 안에 있는 f=f*i 는 Tab 키 두번 누른 공간입니다.
RecursiveFactorial.py 는 아직 재귀호출을 하지 않은 코딩입니다.
이번 강의가 재귀호출이라 그냥 파일명을 Recursive 라고 붙인 겁니다.
이번 다음 코딩에서 재귀호출 알고리즘을 이용할 것입니다.
RecursiveFactorial.py
# 1부터 n 까지 연속한 정수의 곱 구하기
# 입력 : n
# 출력 : 1부터 n 까지 연속한 숫자를 곱한 결과 값
def recur_fact(n):
f = 1 # 곱을 계산할 변수에 초깃값을 1로 세팅합니다.
for i in range(1, n+1) : # 1부터 n까지 반복 (n+1)은 제외
f = f * i
return f
print(recur_fact(0)) # 0! =1
print(recur_fact(6)) # 6! = 720
print(recur_fact(10)) # 10! = 3628800
C:\python>python RecursiveFactorial.py
1
720
3628800
for in 문
for문의 기본적인 구조는 다음과 같습니다.
for 변수 in 반복가능한 객체: # 반복가능한 객체로 리스트, 튜플 같은 것을 말하는데
# 우리는 range 를 사용하겠습니다.
수행할 문장1
수행할 문장2
...
반복가능한 객체로 range 를 사용하게 되면 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 "수행할 문장1", "수행할 문장2" 등이 수행됩니다.
항상 프로그래밍 입문할 때 Hello, world! 를 출력하는 것으로 시작을 하는데 10번 출력하는 것을 코딩해 봅시다.
# print 10번 사용
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
이것이 100번 , 1000 번 반복한다면 무척 귀찮겠죠.
이때 for in 을 사용합니다.
IDLE 사용
참...간단한 코딩은 IDLE 를 사용합시다.
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> print("Hello, World")
Hello, World
>>> print("Hello, world!") #쌍따옴표 사용해도 되고
Hello, world!
>>> print('Hello, world!') #따옴표 한개 사용해도 됩니다.
Hello, world!
>>>
>>>for i in range(10): # range(10) 숫자 0부터 9까지 생성하면서 차례로 하나씩 꺼내어 i 에 대입
# 엔터키 치시고
print('Hello, world!') # 엔터키 치시고
# 한번 더 엔터키 칩니다.
Hello,world!
Hello,world!
Hello,world!
Hello,world!
Hello,world!
Hello,world!
Hello,world!
Hello,world!
Hello,world!
Hello,world!
>>>
range(10) : 숫자 0부터 9까지 생성합니다.
-
생성된 0부터 9까지 숫자에서 하나씩 꺼내어 i 에 대입합니다.
-
숫자를 하나씩 꺼낼 때마다 print('Hello, world!') 를 실행합니다.
이제 이렇게 간단한 코딩 for i in range(10): print('Hello, world!') 은 외울 정도가 되었을 겁니다.
어느 공부든지 외우는 것은 중요합니다.
이제 IDLE 에서 소스 파일을 만들어 봅시다.
File > New File 을 합니다.
내용이 비어 있는 소스 코드 편집창이 나옵니다.
다음 내용을 소스 코드 편집 창에 입력하세요.
입력한 파이썬 코드를 실행하려면 .py 파일에 저장해야 합니다. 소스 코드 편집 창의 메뉴에서 File > Save를 클릭하거나 Ctrl+S를 누릅니다.
HelloWorld 라고 하면 파일 형식은 자동으로 py 가 붙어서 HelloWorld.py 가 만들어 집니다.
이제 소스 코드 편집 창의 메뉴에서 Run > Run Module을 클릭하거나 F5 키를 누르면 IDLE의 파이썬 셸 창에 Hello, world!가 출력됩니다.
이렇게 IDLE의 소스 코드 편집 창에 내용을 입력한 뒤 실행하면 파이썬 셸 창에 결과가 출력됩니다.
이렇게 파이썬 코드를 저장한 .py 파일을 파이썬 스크립트(Python script)라고 부릅니다.
shell 을 그만 두고 싶을 때는 exit() 를 적으시면 됩니다.
[확인] 을 클릭하세요.
>>>exit()
저장한 HelloWorld.py 를 열어서 사용하고 싶을 때는 File > Open 을 해서 여시면 됩니다.
중간 타임으로 IDLE 사용법을 설명하였습니다. 코딩을 공부하시다가 간단한 코딩들은 IDLE 을 열어서 확인을 해 가면서 공부를 하면 좋습니다.
이제 우리가 작성한 프로그램 호출 순서를 생각해 봅시다.
def recur_fact(n):
f = 1 # 곱을 계산할 변수에 초깃값을 1로 세팅합니다.
for i in range(1, n+1) : # 1부터 n까지 반복 (n+1)은 제외
f = f * i
return f
print(recur_fact(0)) # 0! =1
print(recur_fact(6)) # 6! = 720
print(recur_fact(10)) # 10! = 3628800
print(recur_fact(6))
에서 recur_fact(n) 함수를 불러내어서 n에 6을 대입합니다.
def recur_fact(6):
f=1 로 해서 f의 값을 1로 초기세팅을 합니다.
range(1, n+1) 에 가서 n에 6을 대입하면
range(1, 7) # 1, 2, 3, 4, 5, 6 숫자를 생성합니다.
range(1, 7) 에서 생성한 1, 2, 3, 4, 5, 6 숫자를 앞에서 부터 하나씩 꺼내어 for i 에 있는 i 에 하나씩 대입을 합니다.
1을 먼저 꺼내므로 i=1 이 됩니다.
f = f * i 로 가서 현재 f=1, i = 1 이므로 f = 1 * 1 = 1 이 됩니다.
f = f * i # f = 1 * 1 = 1
이제 f=1 이 됩니다.
range(1, 7) 에서 생성한 1, 2, 3, 4, 5, 6 숫자 2를 꺼냅니다.
i=2 가 됩니다.
f = f * i 로 가서 현재 f=1, i = 2 이므로 f = 1 * 2 = 2 가 됩니다.
이제 f = 2 가 되는 것입니다.
range(1, 7) 에서 생성한 1, 2, 3, 4, 5, 6 숫자 3을 꺼냅니다.
i=3 이 됩니다.
f = f * i 로 가서 현재 f=2, i = 3 이므로 f = 2 * 3 = 6 이 됩니다.
이제 f=6 이 됩니다.
range(1, 7) 에서 생성한 1, 2, 3, 4, 5, 6 숫자 4를 꺼냅니다.
i=4 가 됩니다.
f = f * i 로 가서 현재 f=6, i = 4 이므로 f = 6 * 4 = 24 가 됩니다.
이제 f=24 이 됩니다.
range(1, 7) 에서 생성한 1, 2, 3, 4, 5, 6 숫자 5를 꺼냅니다.
i=5 가 됩니다.
f = f * i 로 가서 현재 f=24, i = 5 이므로 f = 24 * 5 = 120 이 됩니다.
이제 f=120 이 됩니다.
range(1, 7) 에서 생성한 1, 2, 3, 4, 5, 6 숫자 6을 꺼냅니다.
i=6 이 됩니다.
f = f * i 로 가서 현재 f=120, i = 6 이므로 f = 120 * 6 = 720 이 됩니다.
range(1, 7) 에서 생성한 1, 2, 3, 4, 5, 6 을 다 불러냈으므로 return f 로 갑니다.
return f # f = 720
f = 720 의 값을 recur_fact(6) 에 대입하여 print(recur_fact(6)) 에서 720 이 출력되게 합니다.
이번 강의는 재귀호출을 배우는 부분이므로 RecursiveFactorial.py 는 아직 재귀호출을 구현하지 않았으므로 코딩 해석은 1강 sum.py 를 이해하신 분들은 직감적으로 이해를 하실 것입니다.
'Python > 닭치고 Algorithm' 카테고리의 다른 글
7강 자료형-숫자형 bool(Python Algorithm 7 Data Type-Number bool) (0) | 2020.03.01 |
---|---|
6강 재귀호출 팩토리얼2(Python Algorithm 6 Factorial2) (0) | 2020.03.01 |
4강 두 스크린을 한개의 스크린으로 사용하기(Python Algorithm 4 HDMI Cable) (0) | 2020.03.01 |
3강 Python 실행(Python Algorithm 3 Python EXE) (0) | 2020.03.01 |
2강 Python 설치(Python Algorithm 2 Python Setup) (2) | 2020.02.14 |
댓글