Python/online judge

백준 [10870.피보나치 수5] | Python

구름솜:D 2023. 11. 17. 16:56
728x90

✏️ 문제

https://www.acmicpc.net/problem/10870

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

 

✏️ 풀이방법

1. for문으로 풀기

1) 0과1로 시작하는 리스트 선언

2) 앞에 두 수를 더한 값을 리스트에 추가 

3) 리스트의 마지막 값 출력

 

2. 재귀함수로 풀기

1) 두 수를 더하여 리턴하는 함수를 선언

2) 구하려는 값에서 거꾸로 함수를 호출하며 리턴(재귀함수)

 

📌 코드

1) for문을 사용하여 반복

n = int(input())
fibo = [0,1]
for i in range(2,n+1):
    fibo.append(fibo[i-1]+fibo[i-2])
print(fibo[n])

 

2) 함수정의 후 함수호출(재귀함수)

- 숫자로 리턴하는 방법

n = int(input())
def fibo(n):
    if n == 1:
        return 1
    if n == 0:
        return 0
    return fibo(n-1)+fibo(n-2)

print(fibo(n))

 

- 변수로 리턴하는 방법

def fibonacci(n):
    global result
    if n <=1:
        result = n
        return result
    result = fibonacci(n-1)+fibonacci(n-2)
    return result

n = int(input())
result = 0
fibonacci(n)
print(result)
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)


n = int(input())
fibonacci(n)
print(fibonacci(n))

 

📌 결과

10   #입력 
55   #출력

 

 

🤔 시행착오.1

def fibonacci(n):
    global result
    if n <=1:
        return n
    result=fibonacci(n-1)+fibonacci(n-2)
    return result
    
n = int(input())
result = 0
fibonacci(n)
print(result)

- 1입력하면 result가 1이 출력되어야하는데  0출력

- print가 result 변수로 반환하는데 if 문의 return값이 n 이라 result 값이 변경되지 않고 전역변수의 값 그대로 0이 출력됨

 

 

📒 다시보기

 

[Python] 18. 전역변수, 지역변수

전역변수 - 함수 밖의 전역 공간에 선언된 변수 - 프로그램 시작부터 종료까지 메모리에 상주하여 어디서든 접근이 가능한 변수 - 함수 내에서 참조 가능 - 함수 밖에서 참조하면 원래의 값으로

somin0416.tistory.com

 

'Python > online judge' 카테고리의 다른 글

백준 [2563.색종이] | Python  (0) 2023.11.17
백준 [1157.단어 공부] | Python  (0) 2023.11.17
백준 [10798.세로읽기] | Python  (0) 2023.11.17
백준 [2738.행렬 덧셈] | Python  (0) 2023.11.17
백준 [2438.별찍기-1] | Python  (0) 2023.11.16