피보나치수는 0과 1로 시작하며 다음 피보나치수는 바로 앞의 두 피보나치 수의 합이 된다.
시간복잡도는 신경 안쓰고 그냥 클로저 라는 기능을 봤을때
피보나치수열이 생각나서 그냥 구현해봤다.
def fibo(f,b):
front = f
back = b
print(f"시작 값 1번째, 2번째 : {f}, {b}")
result = 0
def nacci():
nonlocal front
nonlocal back
nonlocal result
result = front + back
front = back
back = result
return front, back, result
return nacci
# 시작 값 입력 0,1
c = fibo(0,1)
# 10번만 돌려보자
for i in range(0,10):
print(f"{i+3}번째: {c()[2]}")
클로저란 함수를 둘러싼 환경(지역변수 , 코드 등) 을 계속 유지하다가 , 함수들 호출할 때 다시 꺼내서 사용하는 함수를 클로저 라고 한다.
위 코드에서 C에 저장된 함수가 클로저가 되고
nonlocal로 변수를 선언해서 지역변수를 변경함
--- 뭘 잘못만졌는지 뒷 내용이 사라져있다.. 뭐지..? 수정 2021.10.25
위 코드에서 C에 저장된 함수가 클로저가 되고
c = fibo(0, 1) 을 선언한 순간 class의 __init__처럼 초기화 되어 시작 값 "1번째, 2번째~" 가 출력된다.
그 이후로는 c가 nacci()함수가 되고 nonlocal로 선언한 지역 변수인 front, back, result에 계속 저장되면서 피보나치수열이 동작하게된다.
또 클로저에 속한 지역변수는 바깥에서 직접 접근할 수 없어, 데이터를 숨기고 싶을 때 활용할 수 있다
결과
'의지박약 > 기본기가없다' 카테고리의 다른 글
[자료구조] 데이터 구조 연산별 시간복잡도(Data Structure Operation) - javascript (0) | 2021.05.20 |
---|---|
[python] Operations 별 시간복잡도(TimeComplexity) - list, set, dictionary (0) | 2021.05.20 |
[python] Collection과 Dictionary와 Hash와 Key-Value (0) | 2021.05.13 |
얼마나 할지 모르겠지만.. (0) | 2021.05.13 |
댓글