알고리즘

피보나치 수열(반복문, 재귀함수)

돌밍 2024. 1. 16. 15:45
728x90

 

피보나치 수열이란?

1부터 시작하여 1,2 인덱스를 더하면 3인덱스의 답이되고, 2,3인덱스를 더하면 4 인덱스의 답이 되는 수열이다..

1, 1, 2, 3, 5, 8 ........

 

반복문을 이용하는 방법과 재귀 함수를 이용하는 두 가지 방법이 있다.

먼저 반복문을 이용하는 방법이다

# 반복문을 이용하는 방법
def fibonacci_for(n):
    list = []
    if n<=0:
        return []
    elif n == 1:
        return [1]
    elif n == 2:
        return [1, 1]
    
    sequence = [1, 1]
    for i in range(2, n):
        sequence.append(sequence[i-1] + sequence[i-2])
    return sequence

 

print(fibonacci_for(n)) 을 이용해

숫자 n을 입력하면 n째 자리까지의 피보나치 수열이 출력된다!

 

0,1,2가 들어오면 더하기 수식이 필요없으니 if문으로 경우의 수를 제거해주고

첫 두 수 1과 1을 리스트로 저장해 그 다음 수부터 for문을 이용하는 방법이다.

앞의 두 인덱스가 이미 저장되었기 때문에 그 뒤 인덱스인 2부터 반복을 시작한다.

 

n=3이라면,

i = 2부터 시작해서 sequence[1]+sequence[0]=2

i = 3에는 sequence[2]+sequence[1]=3

이렇게 반복된다.

 

재귀함수를 이용하면 아래 코드가 조금 달라진다.

# 재귀를 이용한 방법
def fibonacci(n):
    if n<=0:
        return []
    elif n==1:
        return [1]
    elif n==2:
        return [1,1]
    else:
        list = fibonacci(n-1)
        list.append(list[-1]+ list[-2])
        return list

 

결과는 위 코드와 똑같다.

 

n이 0, 1, 2일때는 같고,

n>=3일때부터 재귀가 시작된다.

list에 fibonacci(n-1)을 대입하며 재귀를 시작해 첫 리턴인 n=2일때의 리턴값을 먼저 받아온다.

리턴을 받은 list는 마이너스 인덱스를 이용해 뒤에서부터 2개의 값을 더해 리스트에 append한다.

 

피보나치 수열은 유명한 알고리즘이니 외워두는 게 좋겠다...