python 피보나치 수열

BackEnd_Ash.log·2022년 4월 24일
0

알고리즘 인터뷰

목록 보기
7/7

def fib(N:int)->int:
    if N <= 1:
        return N
    return fib(N - 1) + fib(N - 2)

만약 5 를 넣었다고 하면 ,

이런식의 결과를 얻게 되어 return 값 5가 나오게 된다.
이풀이는 논리적으로 맞지만 시간이 오래걸린다고 한다.

그래서 다른 풀이

class Solution:
    dp = collections.defaultdict(int)

    def fib(self, N: int) -> int:
        if N <= 1:
            return N

        if self.dp[N]:
            return self.dp[N]

        self.dp[N] = self.fib(N - 1) + self.fib(N - 2)
        return self.dp[N]

이 풀이를 추천한다.
한번 계산한 수는 더이상 계산하지 않으므로 fib(2)fib(3) 은 한 번만 계산하게 되어 효율적이다
처음의 계산 을 보면 우리는 앞서 fib(2)fib(3) 의 결과를 두번 계산하고있지만
두번째 풀이는 한번만 계산해서 dp[N] 에 넣어준다.

defaultdict(<class 'int'>, {5: 0, 4: 0, 3: 0, 2: 1})
defaultdict(<class 'int'>, {5: 0, 4: 0, 3: 2, 2: 1})
defaultdict(<class 'int'>, {5: 0, 4: 3, 3: 2, 2: 1})
defaultdict(<class 'int'>, {5: 5, 4: 3, 3: 2, 2: 1})

이런식으로 저장하게 된다.

profile
꾸준함이란 ... ?

0개의 댓글