-
백준 1003번: 피보나치 함수피보나치(Fibonacci) 2018. 7. 3. 09:53반응형
https://www.acmicpc.net/problem/1003
1. 문제
다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.
1234567891011int fibonacci(int n) {if (n == 0) {printf("0");return 0;} else if (n == 1) {printf("1");return 1;} else {return fibonacci(n‐1) + fibonacci(n‐2);}}cs fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.
fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.
fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.
두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다.
fibonacci(0)은 0을 출력하고, 0을 리턴한다.
fibonacci(2)는 fibonacci(1)과 fibonacci(0)의 결과를 얻고, 1을 리턴한다.
첫 번째 호출한 fibonacci(1)은 1을 출력하고, 1을 리턴한다.
fibonacci(3)은 fibonacci(2)와 fibonacci(1)의 결과를 얻고, 2를 리턴한다.
1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.
2. 알고리즘
키워드 - 정수론, 피보나치, 메모제이션
3. 코드
1234567891011121314151617181920212223242526272829303132333435#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <functional> // greater 사용 위해 필요#include <string>using namespace std;#include <iostream>int mem[41] = { 0 };int fibonacci(int n) {if (mem[n] > 0) return mem[n];if (n == 0) return 0;if (n == 1 || n == 2) return 1;return mem[n] = fibonacci(n - 2) + fibonacci(n - 1);}int main() {ios::sync_with_stdio(false); cin.tie(0); // scanf 안쓸 경우 쓰세요. Cin 사용시int T, N;cin >> T;for (int i = 0; i < T; ++i) {cin >> N;if (N == 0)cout << "1 0\n";elsecout << fibonacci(N - 1) << " " << fibonacci(N) << "\n";}return 0;}cs 반응형'피보나치(Fibonacci)' 카테고리의 다른 글
백준 2748번: 피보나치 수2 (0) 2018.07.03 백준 2502번 : 떡 먹는 호랑이 (0) 2018.06.17