피보나치 함수
zero,one 이 피보나치 함수 돌 때마다 0으로 초기화 안댐
import sys
input = sys.stdin.readline
n = int(input())
arr = [int(input()) for _ in range(n)]
print(arr)
zero = 0
one = 0
def fibonacci(i):
global zero, one
if i == 0:
zero += 1
return 0
elif i == 1:
one += 1
return 1
else:
return fibonacci(i-1) + fibonacci(i-2)
for i in arr:
fibonacci(i)
print(zero, one)
t = int(input())
zero = [1,0,1] # n이 0,1,2 일 때 0이 필요한 횟수
one = [0,1,1] # n이 0,1,2 일 때 1이 필요한 횟수
def fibo(n) : #[0,1,3]
if len(zero) <= n : # 3보다 클 떄
for i in range(len(zero), n+1) :
zero.append(zero[i-1]+zero[i-2])
one.append(one[i-1]+one[i-2])
print(zero[n],one[n])
for i in range(t) : #[3]
a = int(input()) #[0,1,3]
fibo(a)
global 키워드는 함수 내
에서 전역 변수를 참조하고 수정하기 위해 사용
함수 내에서 전역 변수에 값을 할당하려면 global 키워드를 사용해야 합니다. 그렇지 않으면 파이썬은 해당 변수를 지역 변수로 간주합니다.
global 키워드는 네임스페이스의 최상위 레벨에 있는 변수를 참조합니다.
x = 10
def update_global_x():
global x
x = 20 # 전역 변수 x를 수정
update_global_x()
print(x) # 출력: 20
nonlocal 키워드는 중첩된 함수에서 비전역(하지만 지역도 아닌) 변수를 참조하고 수정하기 위해 사용
nonlocal은 현재 함수의 바깥쪽에 있는 (하지만 전역은 아닌) 변수를 참조하려고 할 때 사용됩니다.
nonlocal 키워드는 중첩된 함수의 스코프 체인을 따라 올라가며 변수를 찾지만, 전역 스코프까지는 찾아가지 않습니다.
def outer():
x = 10
def inner():
nonlocal x
x = 20 # outer 함수의 x를 수정
inner()
print(x) # 출력: 20
outer()