int
ограничен 32-битной точностью, long
- 64-битной.
Когда вы превышаете ограничение, добавляя числа, результат которых больше, чем битовый предел, они "переворачиваются"и вы потеряете наиболее значимые биты в результате сложения - по сути, они «округлены» до 32/64 бит.
Вот пример пролонгации:
int i = Integer.MAX_VALUE; // 2147483647
i++; // -2147483648
Примерноговоря, каждое число Фибоначчи в два раза превосходит предыдущее, поэтому, грубо говоря, вы можете обработать его только в порядке 64 итераций, используя long
как общее значение.