[백준 / 파이썬] 피보나치 함수

yejichoi·2023년 10월 26일
0

알고리즘 스터디

목록 보기
137/153

피보나치 함수


나의 풀이

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)

TIL

global

global 키워드는 함수 내에서 전역 변수를 참조하고 수정하기 위해 사용
함수 내에서 전역 변수에 값을 할당하려면 global 키워드를 사용해야 합니다. 그렇지 않으면 파이썬은 해당 변수를 지역 변수로 간주합니다.
global 키워드는 네임스페이스의 최상위 레벨에 있는 변수를 참조합니다.

x = 10

def update_global_x():
    global x
    x = 20  # 전역 변수 x를 수정

update_global_x()
print(x)  # 출력: 20

nonlocal

nonlocal 키워드는 중첩된 함수에서 비전역(하지만 지역도 아닌) 변수를 참조하고 수정하기 위해 사용
nonlocal은 현재 함수의 바깥쪽에 있는 (하지만 전역은 아닌) 변수를 참조하려고 할 때 사용됩니다.
nonlocal 키워드는 중첩된 함수의 스코프 체인을 따라 올라가며 변수를 찾지만, 전역 스코프까지는 찾아가지 않습니다.

def outer():
    x = 10
    def inner():
        nonlocal x
        x = 20  # outer 함수의 x를 수정
    inner()
    print(x)  # 출력: 20

outer()

0개의 댓글