본문 바로가기

프로그래밍/알고리즘

피보나치 수열을 표현하는 2가지 방법

1. 재귀함수를 통한 표현 방법

 

1
2
3
4
5
6
7
def fibo(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibo(n-1+ fibo(n-2)
cs

기본적으로 사용되는 피보나치 함수이다.

하지만 이 함수는 하나의 함수호출이 다른 두개의 함수 호출로 나뉘어지는 바이너리 형태이다.

따라서 시간 복잡도는 O(2^n)로 n이 커질수록 결과를 가져오는 시간이 급증한다.

 

 

 

 

2. 반복문을 통한 표현 방법

 

1
2
3
4
5
6
7
8
9
def fibo(n):
    zero = 1
    one = 0
    tmp = 0
    for _ in range(n):
        tmp = one
        one = one + zero
        zero = tmp
    return one
cs

앞의 함수와 다르게 for문의 반복을 통해 결과를 가져온다.

총 n번의 실행을 거쳐 결과를 가져오므로 시간복잡도는 O(n)으로

앞의 함수에 비해 n이 커졌을때에도 결과를 가져오는 시간이 짧다.

 

 

 

 

결론 : 같은 역할을 하는 함수라도 시간복잡도를 더 작게 만들 수 있다.

'프로그래밍 > 알고리즘' 카테고리의 다른 글

BFS의 기본 방식  (0) 2020.09.10