Функциональные уравнения, в их наиболее общих терминах, действительно очень сложны. Не случайно, что почти во всех международных соревнованиях по математике присутствует один из них, обычно выглядящий таким же невинным, как тот, который вы написали. Методы их решения варьируются от простой индукции до бесконечномерного анализа банаховых пространств, и общий программный подход к их решению весьма маловероятен.
В этом конкретном случае, вот простой подход:
Предположим, что для любых двух целых чисел m, n F (m) = F (n) = k. Но тогда m = F (F (m)) = F (k) = F (F (n)) = n: поэтому m = n и F никогда не принимает одно и то же значение на двух разных входах. Но мы знаем, что F (F (n)) = n = F (F (n + 2) +2) - поэтому F (n) и F (n + 2) +2 должны быть одинаковыми числами, то есть , F (n + 2) == F (n) - 2 == F (n-2) - 4 = .... Теперь мы знаем F (0) = 1, поэтому F (1) = F (F (0)) = 0. Но тогда F (129) = F (127) - 2 = F (125) - 4 = ... = F (1) - 128 = -128
Итак, у вас есть решение, но механического алгоритма для решения любого варианта просто не существует.