지난 강좌의 재귀(Recursion)와 꼬리 재귀(Tail Recursion)로 피보나치 수열을 구현해보고 시간을 측정해보자.
먼저 파이썬에서 시간 측정은 time 모듈을 통해 할 수 있다.
import time
start_time = time.time()
.
.
.
end_time = time.time()
print(f"exec.time = {end_time-start_time}")
우리는 피보나치 수열에 40을 넣어보고 값을 구할때 까지의 시간을 측정해볼 것이다.
재귀
import time
start_time = time.time()
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)
print("fib(40) = ", fib(40))
end_time = time.time()
print (f"exec.time = {end_time-start_time}")
결과
fib(40) = 102334155
exec.time = 29.930135011672974
시간은 대략 30초가 소요되었다.
꼬리재귀
import time
start_time = time.time()
def fib_tr(n, pp, p):
if n == 1:
return n*p
else:
return fib_tr(n-1, pp+p, pp)
print("fib_tr(40) = ", fib_tr(40, 1, 1))
end_time = time.time()
print(f"exec.time = {end_time-start_time}")
결과
fib_tr(40) = 102334155
exec.time = 0.00000000000001
시간은 0초대이다.
꼬리재귀를 통해 효율적인 코드를 작성할 수 있음을 확인할 수 있다.
'프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 25. 매개변수 전달(Parameter Passing) (1) | 2023.10.17 |
---|---|
[프로그래밍언어론] 24. 컨트롤 추상화(Control Abstraction) (0) | 2023.10.17 |
[프로그래밍언어론] 22. 재귀(Recursion) (0) | 2023.10.12 |
[프로그래밍언어론] 21. 제어 흐름(Control Flow) (0) | 2023.10.11 |
[프로그래밍언어론] 20. 명령문(Statements) (0) | 2023.10.11 |
지난 강좌의 재귀(Recursion)와 꼬리 재귀(Tail Recursion)로 피보나치 수열을 구현해보고 시간을 측정해보자.
먼저 파이썬에서 시간 측정은 time 모듈을 통해 할 수 있다.
import time
start_time = time.time()
.
.
.
end_time = time.time()
print(f"exec.time = {end_time-start_time}")
우리는 피보나치 수열에 40을 넣어보고 값을 구할때 까지의 시간을 측정해볼 것이다.
재귀
import time
start_time = time.time()
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)
print("fib(40) = ", fib(40))
end_time = time.time()
print (f"exec.time = {end_time-start_time}")
결과
fib(40) = 102334155
exec.time = 29.930135011672974
시간은 대략 30초가 소요되었다.
꼬리재귀
import time
start_time = time.time()
def fib_tr(n, pp, p):
if n == 1:
return n*p
else:
return fib_tr(n-1, pp+p, pp)
print("fib_tr(40) = ", fib_tr(40, 1, 1))
end_time = time.time()
print(f"exec.time = {end_time-start_time}")
결과
fib_tr(40) = 102334155
exec.time = 0.00000000000001
시간은 0초대이다.
꼬리재귀를 통해 효율적인 코드를 작성할 수 있음을 확인할 수 있다.
'프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 25. 매개변수 전달(Parameter Passing) (1) | 2023.10.17 |
---|---|
[프로그래밍언어론] 24. 컨트롤 추상화(Control Abstraction) (0) | 2023.10.17 |
[프로그래밍언어론] 22. 재귀(Recursion) (0) | 2023.10.12 |
[프로그래밍언어론] 21. 제어 흐름(Control Flow) (0) | 2023.10.11 |
[프로그래밍언어론] 20. 명령문(Statements) (0) | 2023.10.11 |