본문 바로가기

c언어피보나치2

[C/C++] 코드업 1916 : (재귀함수) 피보나치 수열 (Large) 문제풀이 이 문제는 메모이제이션을 이용하여 재귀 함수 계산 시간을 단축하는 문제임. 이전 문제에서는 단순히 함수 호출을 반복해서 하였으나, 이번 문제는 배열에 결과값을 적고, 값이 필요하면 '함수를 호출하는 것'이 아니라 '배열에서 이전에 계산한 값'만 불러오게 되어 시간이 단축되는 구조임. 중복해서 함수를 계속 부르는 것보다 배열에서 가져다 쓰는 게 빠름. 메모이제이션은 top down과 bottom up이 있는 데, 사실 이러한 개념보다는 아래 문장을 외워보는 게 좋음. '값이 배열에 적혀 있지 않으면 배열에 적은 후 리턴하고, 값이 이미 적혀 있다면 적힌 값을 리턴함.' 이것만 잊지 않는다면 웬만한 메모이제이션 문제를 모두 풀 수 있음. 그리고 잘 보면 아래에 %10009로 나머지 구하는 걸 거의 .. 2022. 10. 8.
[C/C++] 코드업 1915 : (재귀함수) 피보나치 수열 문제풀이 재귀함수를 사용하여 피보나치 수열을 구하면 됨. 이전 두 항의 합을 더하면 현재 항의 값이 나오게 됨. 재귀 함수 관점에서 생각하면 5번째 항이면 3번째와 4번째 항, 그리고 각각 3번째 항은 (1번째 항과 2번째 항)의 합이고, 4번째 항은 (2번째 항과 3번째 항)의 합이 됨. 이런 식으로 쪼개지고 쪼개지고 하는 것임. 이번 문제는 시간 제한이 2초나 되고 입력되는 자연수가 20이하이므로 재귀 함수를 편하게 구현하면 됨. 소스코드 #include using namespace std; int fibbo(int a){ if (a==1 || a==2) return 1; else return fibbo(a-1)+fibbo(a-2); } int main() { int n; cin>>n; cout 2022. 10. 8.