Основная проблема с вашим переводом с Python на Java заключается в том, что оператор присваивания Python там выполняется одновременно, а Java - последовательно. Заявление Python эквивалентно высказыванию этого:
Make a list out of 'b' and 'a + b'
Make another list out of references to 'a' and 'b'
Assign all the elements from the second list to the first one
(На самом деле это может быть кортеж, я не очень хорошо говорю на Python.)
Таким образом, 'b' и 'a + b' преобразуются в значения до того, как они назначены. Вы не можете делать такое множественное одновременное назначение в Java.
В общем, оператор на Python похож на
var1, var2, ...varN = expression1, expression2, ...expressionN
собирается перевести на Java на
temp1 = expression1;
temp2 = expression2;
...
tempN = expressionN;
var1 = temp1;
var2 = temp2;
...
varN = tempN;
Таким образом, все выражения разрешаются в значения до назначения происходят, и ни одно из назначений не имеет побочных эффектов на выражения.
Если бы я делал это по-настоящему, я, вероятно, составил бы таблицу поиска и сохранил бы длинные (поскольку числа Фибоначчи неопределенно растут экспоненциально, и я бы хотел пройти дальше 46). Итеративная форма, как и у вас, будет принимать O (N) для вычисления N-го значения Фибоначчи; типичная рекурсивная формулировка будет принимать столько же вызовов функций, сколько и возвращаемое значение. Фибоначчи практически просит где-то кэшировать ответы, и это сделает рекурсивную форму гораздо более выполнимой.