๐Ÿ“’ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Recursive Algorithm)

Kimdongkiยท2024๋…„ 3์›” 25์ผ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
2/8

๐Ÿ“Œ ์žฌ๊ท€ํ•จ์ˆ˜

  • ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์—์„œ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ
  • ๋งŽ์€ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ex) ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)

๐Ÿ“™ ์‹ค์Šต 1 - ์ž์—ฐ์ˆ˜์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ(1~n๊นŒ์ง€ ๋ชจ๋“  ์ž์—ฐ์ˆ˜์˜ ํ•ฉ)

def Sigma(n)
	if n<= 1: return n
    else: return n+Sigma(n-1)

๐Ÿ“™ ์‹ค์Šต 2 - Factorial(1~n๊นŒ์ง€ ๋ชจ๋“  ์ž์—ฐ์ˆ˜์˜ ๊ณฑ)

def Factorial(n):
	if n<=1: return 1
    else: return n*Factorial(n-1)

๐Ÿ“™ ์‹ค์Šต 3 - Fibonacci ์ˆœ์—ด

Iterative

def Fibonacci_While(x):
	if x<=1: return x
    Fibo = [0, 1]
    i = 2
    while n<=x:
    	Fibo.append(Fibo[i-1]+Fibo[i-2])
        i+=1
    return Fibo[x]

def Fibonacci_for(x):
	if x<=1: return x
    Fibo = [0, 1]
    for i in range(2, x+1):
    	Fibo.append(Fibo[i-1]+Fibo[i-2])
    return Fobo[x]

Recursive

def Fibonacci_Recursive(x):
	if x<=1: return x
    else:
    	num = Fibonacci_Recursive(x-1)+Fibonacci_Recursive(x-2)
    return num

๐Ÿ“™ ์‹ค์Šต 4 - ์กฐํ•ฉ์˜ ์ˆ˜
1. Math ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

from math import factorial as F
def Combination(n, m):
	return F(n)/F(m)*F(n-m))
  1. Recursive

def Combination(n, m):
	if n==m or m==0: return 1
    else:
    	return Combination(n-1, m) + Combination(n-1, m-1)

๐Ÿ“™ ์‹ค์Šต 5 - ํ•˜๋…ธ์ด์˜ ํƒ‘

def Top_of_Hanoi(n, Start, End, Sup):
	if n==1:
    	print("์›๋ฐ˜์ด 1๊ฐœ์ž…๋‹ˆ๋‹ค. ",Start,"์—์„œ ", End, "๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.")
    	return
    Top_of_Hanoi(n-1, Start, Sup, End)
    print("์›๋ฐ˜", n, "์„", Start, "์—์„œ", End, "๋กœ ์˜ฎ๊น๋‹ˆ๋‹ค.")
    Top_of_Hanoi(n-1, Sup, End, Start)

Top_of_Hanoi(3, 'A', 'C', 'B')

๐Ÿ“™ ์‹ค์Šต 6 - ์žฌ๊ท€์  ์ด์ง„ ํƒ์ƒ‰

def Binary_Search(L, x, lower, upper):
	if lower>upper: return -1
    mid = (lower+upper)//2
    
    if x==L[mid]: return mid
    elif x<L[mid]:
    	return Binary_Search(L, x, lower, mid-1)
    else:
    	return Binary_Search(L, x, mid+1, upper)

0๊ฐœ์˜ ๋Œ“๊ธ€