5. 팩토리얼 값 구하기
피보나치 수열 구하기
이항계수 구하기
하노이 타워 게임
이진탐색 수행
영역채색 (Blob Coloring)
`
1
0
)!
1
(
*
1
!
=
−
=
n
n
n
n
n
n)
k
otherwise(
n
k
or
k
C
C
C
k
n
k
n
k
n
=
=
+
=
−
−
− 0
0
1
1
1
1
−
+
−
=
=
=
otherwise
n
fib
n
fib
n
if
n
if
n
fib
)
1
(
)
2
(
1
1
0
0
)
(
27. N제곱 계산하기
순환적인 방법의 시간 복잡도
n이 2의 제곱이라면 문제의 크기가 절반씩 줄어든다.
시간 복잡도
순환적인 함수: O(log2n) -> 반복문을 적용한 경우에 비해 매우 빠른 성능을 보임
반복적인 함수: O(n)
0
1
2
1
2
2
2
2
2 →
→
→
→ −
n
n
순환 함수 1억 회 호출
반복 함수 1억 회 호출
47. from tkinter import *
## 함수 선언 부분 ##
def drawCircle(x, y, r) :
global count
count += 1
canvas.create_oval(x-r, y-r, x+r, y+r)
canvas.create_text(x, y-r, text=str(count), font=('', 30))
if r >= radius/2 :
drawCircle(x-r//2, y, r//2)
drawCircle(x+r//2, y, r//2)
## 전역 변수 선언 부분 ##
count = 0
wSize = 1000
radius = 400
## 메인 코드 부분 ##
window = Tk()
canvas = Canvas(window, height=wSize, width=wSize, bg='white')
drawCircle(wSize//2, wSize//2, radius)
canvas.pack()
window.mainloop()
Code 10-13
• 실행결과
48. from tkinter import *
import random
## 함수 선언 부분 ##
def drawCircle(x, y, r) :
canvas.create_oval(x-r, y-r, x+r, y+r, width=2, outline=random.choice(colors))
if r >= 5 :
drawCircle(x+r//2, y, r//2)
drawCircle(x-r//2, y, r//2)
## 전역 변수 선언 부분 ##
colors = ["red", "green", "blue", "black", "orange", "indigo", "violet"]
wSize = 1000
radius = 400
## 메인 코드 부분 ##
window = Tk()
window.title("원 모양의 프랙탈")
canvas = Canvas(window, height=wSize, width=wSize, bg='white')
drawCircle(wSize//2, wSize//2, radius)
canvas.pack()
window.mainloop()
Code 10-14
• 실행결과
49. ## 함수 선언 부분 ##
def notation(base, n):
if n < base :
print(numberChar[n], end = ' ')
else :
notation(base, n // base)
print(numberChar[n % base], end = ' ')
## 전역 변수 선언 부분 ##
numberChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
numberChar += ['A', 'B', 'C', 'D', 'E', 'F']
## 메인 코드 부분 ##
number = int(input('10진수 입력 -->'))
print('n 2진수 : ', end = ' ')
notation(2, number)
print('n 8진수 : ', end = ' ')
notation(8, number)
print('n16진수 : ', end = ' ')
notation(16, number)
EX 10-1
• 실행결과
50. from tkinter import *
## 함수 선언 부분 ##
def drawTriangle(x, y, size) :
if size >= 30 :
drawTriangle(x, y, size/2)
# 왼쪽 아래 작은 삼각형
drawTriangle(x+size/2, y, size / 2)
# 오른쪽 아래 작은 삼각형
drawTriangle(x + size / 4, int(y-size*(3**0.5)/4), size / 2)
# 위쪽 작은 삼각형
else :
canvas.create_polygon (x, y, x + size, y, x + size / 2, y - size*(3
** 0.5) / 2, fill = 'red', outline = "red")
## 전역 변수 선언 부분 ##
wSize = 1000
radius = 400
## 메인 코드 부분 ##
window = Tk()
window.title("삼각형 모양의 프랙탈")
canvas = Canvas(window, height = wSize, width = wSize, bg = 'white')
drawTriangle(wSize/5, wSize/5*4, wSize*2/3)
canvas.pack()
window.mainloop()
EX 10-2
• 실행결과
51. def addNumber(num1, num2) :
if num2 <= num1 :
return num1
return num2 + addNumber( num1, num2 - 1 )
num1 = int(input('숫자1-->'))
num2 = int(input('숫자2-->'))
if num1 > num2 :
num1, num2 = num2, num1
print(addNumber(num1, num2))
실행결과
Self 10-1
def gugu(dan, num) :
print("%dx%d=%2d" % (dan, num, dan*num), end = ' ')
if dan < 9:
gugu(dan+1, num)
for num in range(1,10) :
gugu(2, num)
print()
Self 10-2
실행결과