← 목차로 돌아가기 / Back to Index

🧪 Ch10. 재귀 호출 — 실습 코드 / Lab Code: Recursion

자료구조와 알고리즘 실습 | Data Structures & Algorithms Lab

💡 학습 팁: 코드를 직접 타이핑하면서 익히세요! 숨겨진 코드는 버튼을 눌러 확인하기 전에 먼저 스스로 생각해 보세요.
💡 Study Tip: Type the code yourself to learn! Try to think about hidden sections before revealing them.

📘 교재 예제 (Code)

📘 Textbook Examples (Code)

Code10-01.py

무한 재귀 호출의 개념을 확인합니다

def openBox() :
openBox()	# 처음 함수를 다시 호출
Code10-01.py

Demonstrates the concept of infinite recursion

def openBox() :
openBox()	# First function call again
Code10-02.py

재귀 호출의 종료 조건(기저 조건)을 설정합니다

def openBox() :
count = 10
openBox()	# 처음 함수를 다시 호출

Code10-02.py

Sets a base case to terminate recursion

def openBox() :
count = 10
openBox()	# First function call again

Code10-03.py

재귀로 1부터 n까지의 합을 구합니다

def addNumber(num) :
print(addNumber(10))
Code10-03.py

Calculates the sum from 1 to n using recursion

def addNumber(num) :
print(addNumber(10))
Code10-04.py

재귀로 팩토리얼을 계산합니다

def factorial(num) :
print('\n5! = ', factorial(5))
Code10-04.py

Calculates factorial using recursion

def factorial(num) :
print('\n5! = ', factorial(5))
Code10-05.py

재귀로 카운트다운을 구현합니다

def countDown(n) :
countDown(5)
Code10-05.py

Implements a countdown using recursion

def countDown(n) :
countDown(5)
Code10-06.py

재귀로 별 모양 패턴을 출력합니다

def printStar(n) :
printStar(5)
Code10-06.py

Prints a star pattern using recursion

def printStar(n) :
printStar(5)
Code10-07.py

재귀로 구구단을 출력합니다

def gugu(dan, num) :
for dan in range(2,10) :
	print("## %d단 ##" % dan)
	gugu(dan, 1)
Code10-07.py

Prints a multiplication table using recursion

def gugu(dan, num) :
for dan in range(2,10) :
	print("## %d-dan ##" % dan)
	gugu(dan, 1)
Code10-08.py

재귀로 거듭제곱을 계산합니다

tab = ''
def pow(x, n) :
print('2^4')
print('답 -->', pow(2, 4))
Code10-08.py

Calculates power (exponentiation) using recursion

tab = ''
def pow(x, n) :
print('2^4')
print('answer -->', pow(2, 4))
Code10-09.py

재귀로 배열의 합계를 구합니다

import random

def arySum(arr, n) :
ary = [random.randint(0, 255) for _ in range(random.randint(10, 20))]
print(ary)
print('배열 합계 -->', arySum(ary, len(ary)-1))
Code10-09.py

Calculates array sum using recursion

import random

def arySum(arr, n) :
ary = [random.randint(0, 255) for _ in range(random.randint(10, 20))]
print(ary)
print('Array sum -->', arySum(ary, len(ary)-1))
Code10-10.py

재귀로 피보나치 수열을 구현합니다

def fibo(n) :
print('피보나치 수 --> 0 1 ', end='')
for i in range(2, 20) :
	print(fibo(i), end=' ')
Code10-10.py

Implements the Fibonacci sequence using recursion

def fibo(n) :
print('Fibonacci number --> 0 1 ', end='')
for i in range(2, 20) :
	print(fibo(i), end=' ')
Code10-11.py

재귀로 회문(palindrome) 검사를 구현합니다

## 함수 선언 부분 ##
def palindrome(pStr) :
## 전역 변수 선언 부분 ##
strAry = ["reaver", "kayak", "Borrow or rob", "주유소의 소유주", "야 너 이번주 주번이 너야", "살금 살금"]

## 메인 코드 부분 ##
Code10-11.py

Implements palindrome checking using recursion

## Function Declarations ##
def palindrome(pStr) :
## Global Variables ##
strAry = ["reaver", "kayak", "Borrow or rob", "Gas station owner", "Hey, you're on duty this week", "tiptoeing"]

## Main Code ##
for testStr in strAry :
	print(testStr, end = '--> ' )
	testStr = testStr.lower().replace(' ','')
	if palindrome(testStr) :
		print('O')
	else :
		print('X')
Code10-12.py

재귀로 프랙탈 트리를 그립니다 (tkinter)

from tkinter import *

window = Tk()
canvas = Canvas(window, height=1000, width=1000, bg='white')
canvas.pack()

cx=1000//2
cy=1000//2
r = 400
canvas.create_oval(cx-r, cy-r, cx+r, cy+r, width=2, outline="red")

window.mainloop()
Code10-12.py

Draws a fractal tree using recursion (tkinter)

from tkinter import *

window = Tk()
canvas = Canvas(window, height=1000, width=1000, bg='white')
canvas.pack()

cx=1000//2
cy=1000//2
r = 400
canvas.create_oval(cx-r, cy-r, cx+r, cy+r, width=2, outline="red")

window.mainloop()
Code10-13.py

재귀로 원형 프랙탈을 그립니다 (tkinter)

from tkinter import *

## 함수 선언 부분 ##
def drawCircle(x, y, r) :
## 전역 변수 선언 부분 ##
count = 0
wSize = 1000
radius = 400

## 메인 코드 부분 ##
Code10-13.py

Draws circular fractals using recursion (tkinter)

from tkinter import *

## Function Declarations ##
def drawCircle(x, y, r) :
## Global Variables ##
count = 0
wSize = 1000
radius = 400

## Main Code ##
window = Tk()
canvas = Canvas(window, height=wSize, width=wSize, bg='white')

drawCircle(wSize//2, wSize//2, radius)

canvas.pack()
window.mainloop()
Code10-14.py

재귀로 랜덤 프랙탈 아트를 그립니다 (tkinter)

from tkinter import *
import random

## 함수 선언 부분 ##
def drawCircle(x, y, r) :
## 전역 변수 선언 부분 ##
colors = ["red", "green", "blue", "black", "orange", "indigo", "violet"]
wSize = 1000
radius = 400

## 메인 코드 부분 ##
Code10-14.py

Draws random fractal art using recursion (tkinter)

from tkinter import *
import random

## Function Declarations ##
def drawCircle(x, y, r) :
## Global Variables ##
colors = ["red", "green", "blue", "black", "orange", "indigo", "violet"]
wSize = 1000
radius = 400

## Main Code ##
window = Tk()
window.title("Circle-shaped fractal")
canvas = Canvas(window, height=wSize, width=wSize, bg='white')

drawCircle(wSize//2, wSize//2, radius)

canvas.pack()
window.mainloop()

📗 응용 예제 (Ex)

📗 Applied Examples (Ex)

Ex10-01.py

재귀 응용: n진법 변환기를 구현합니다

## 함수 선언 부분 ##
def notation(base, n):
## 전역 변수 선언 부분 ##
numberChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
numberChar += ['A', 'B', 'C', 'D', 'E', 'F']

## 메인 코드 부분 ##
Ex10-01.py

Recursion application: implements a base-n converter

## Function Declarations ##
def notation(base, n):
## Global Variables ##
numberChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
numberChar += ['A', 'B', 'C', 'D', 'E', 'F']

## Main Code ##
number = int(input('Enter decimal -->'))
print('\n Binary: ', end = ' ')
notation(2, number)
print('\n Octal: ', end = ' ')
notation(8, number)
print('\nHexadecimal: ', end = ' ')
notation(16, number)
Ex10-02.py

재귀 응용: 시에르핀스키 삼각형을 그립니다

from tkinter import *

## 함수 선언 부분 ##
def drawTriangle(x, y, size) :
## 전역 변수 선언 부분 ##
wSize = 1000
radius = 400

## 메인 코드 부분 ##
Ex10-02.py

Recursion application: draws a Sierpinski triangle

from tkinter import *

## Function Declarations ##
def drawTriangle(x, y, size) :
## Global Variables ##
wSize = 1000
radius = 400

## Main Code ##
window = Tk()
window.title("Triangle-shaped fractal")
canvas = Canvas(window, height = wSize, width = wSize, bg = 'white')

drawTriangle(wSize/5, wSize/5*4, wSize*2/3)

canvas.pack()
window.mainloop()

📙 자가 실습 (Self)

📙 Self Practice (Self)

Self10-01.py

재귀로 범위 합계를 직접 구현합니다

def addNumber(num1, num2) :
num1 = int(input('숫자1-->'))
num2 = int(input('숫자2-->'))
if num1 > num2 :
    num1, num2 = num2, num1
print(addNumber(num1, num2))
Self10-01.py

Implements range sum using recursion yourself

def addNumber(num1, num2) :
num1 = int(input('Number1-->'))
num2 = int(input('Number2-->'))
if num1 > num2 :
    num1, num2 = num2, num1
print(addNumber(num1, num2))
Self10-02.py

재귀로 구구단 가로 출력을 직접 구현합니다

def gugu(dan, num) :
for num in range(1,10) :
    gugu(2, num)
    print()
Self10-02.py

Implements horizontal multiplication table using recursion yourself

def gugu(dan, num) :
for num in range(1,10) :
    gugu(2, num)
    print()