c언어 재귀함수 관련 질문

linux_chobo의 이미지

c언어 재귀함수 관련 문제를 풀다가 막히는 부분이 있어서 질문 드립니다.
문제는 다음과 같습니다.

좀 분석을 해보니까 n에 따라 가능한 경우의 수를 f(n)이라 하면

f(n+1) = f(n) + 2f(n-1) [f(1) = 1, f(2) = 3]

이라는 점화식이 나와서 코드를 짜봤습니다
#include <stdio.h>
 
int ncase(int n)
{
    if(n == 1)
        return 1;
    else if(n == 2)
        return 3;
    else
        return ncase(n-1) + 2* ncase(n-2);
}
 
int main(void)
{
    int k, m;
    scanf("%d %d", &k, &m);
    printf("%d\n", ncase(k) % m);
}

이렇게 짜고 제출을 했는데 통과하지 못한 테스트케이스가 있다면서 오답이라고 하더라고요 이 코드의 뭐가 문제인지 아시는 분 있을까요

문제 링크는 https://level.goorm.io/exam/43165/%ED%83%80%EC%9D%BC-%EC%B1%84%EC%9A%B0%EA%B8%B0/quiz/1
여기입니다

익명 사용자의 이미지

n에 1000 넣고 돌려보세요. 뭐가 문제인지 바로 알 수 있게 될 겁니다.

익명 사용자의 이미지

점화식 만드는 능력이 부럽네요 ㅠㅠ 점화식만들면 재귀로 타임오버되는걸 dp로 해결할수있는데