#include #define MAXN 1000010 long long fib(int n) { ///O(1.6^n) if(n == 1 || n == 2) return 1; return fib(n-1) + fib(n-2); } long long fibo[MAXN], f[MAXN]; long long it_fib(int n) { fibo[1] = fibo[2] = 1; int i; for(i = 3; i <= n; i++) fibo[i] = fibo[i-1] + fibo[i-2]; return fibo[n]; } long long fibonacci(int n) { /* Ako je podproblem vec resen, uzimamo gotovo resenje! */ if(f[n] != 0) return f[n]; /* Izlaz iz rekurzije */ if(n <=2) return f[n] = 1; else /* Rekurzivni pozivi */ return f[n] = fibonacci(n - 1) + fibonacci(n - 2); } int main() { int n; scanf("%d", &n); // printf("%lld", it_fib(n)); printf("%lld", fibonacci(n)); // printf("%lld", fib(n)); return 0; }