
어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
"재귀함수가 뭔가요?"
"재귀함수는 자기 자신을 호출하는 함수라네"
"라고 답변하였지."
"라고 답변하였지."
"라고 답변하였지."
<무한루프 예시>
def Recursion(n):
print (n)
Recursion(n-1)
Recursion(10)
<결과>


모든 재귀 호출은 반복문으로 변경 가능하며 모든 반복문도 재귀 호출로 변경 가능하다.
Recursion의 장점
Recursion의 단점
def factorial(n):
result = 1
# 1부터 n까지의 수를 차례대로 곱하기
for i in range(1, n + 1):
result * = i
return result
print(factorial(5))
실행결과 >>> 120
# 재귀함수
def factorial(n):
if n == 1: # n이 1일 때
return 1 # 1을 반환하고 재귀호출을 끝냄
return n * factorial(n - 1) # n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함
print(factorial(5))
실행결과 >>> 120



def fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
print (fib(8))
실행 결과 >>> 21
def fib(n):
a, b = 0, 1
for i in range(n+1): #제너레이터를 구현하면 0부터 n번째 까지 값을 순차적으로 받기때문에 n+1 을 해준다
yield a
a, b = b, a + b
fib = fib(8)
for i, val in enumerate(fib):
print('Fibonacci({}): {}'.format(i, str(val)))
실행결과 >>>
Fibonacci(0): 0
Fibonacci(1): 1
Fibonacci(2): 1
Fibonacci(3): 2
Fibonacci(4): 3
Fibonacci(5): 5
Fibonacci(6): 8
Fibonacci(7): 13
Fibonacci(8): 21
def fibo(n):
if n <3 :
return 1
else :
return fibo(n-1)+fibo(n-2)
#1 1 2 3 5 8 13 21 34 < 결과값
#1 2 3 4 5 6 7 8 9 < 순서
print(fibo(8))
실행결과 >>> 21
https://dojang.io/mod/page/view.php?id=2353
https://psychoria.tistory.com/770
https://ansohxxn.github.io/algorithm%20lesson%201/chapter1-1/
https://freedeveloper.tistory.com/371