/* * recurrence-relations.c */ #include #include #include unsigned long f_arr [100], g_arr [100]; unsigned long f (int n); unsigned long g (int n); int main (void) { char s [100]; int n, i; for (i = 0; i < 100; i++) f_arr [i] = g_arr [i] = -1; f_arr [1] = 1; g_arr [1] = g_arr [3] = 1; g_arr [2] = 0; while (gets (s) != NULL) { sscanf (s, "%d", &n); printf ("%lu\n", f (n)); } return 0; } unsigned long f (int n) { if (n == 1) return 1; if (f_arr [n] == -1) f_arr [n] = f (n - 1) + g (n - 1); return f_arr [n]; } unsigned long g (int n) { if (n == 1) return 1; else if (n == 2) return 0; else if (n == 3) return 1; if (g_arr [n] == -1) g_arr [n] = g (n - 1) + g (n - 3); return g_arr [n]; }