Cuesta ver lo que realmente hace esa función, pero si no me equivoco la serie de pasos es esta:
Al declarar el vector, queda esto
f[0] = 0
f[1] = 1
Y luego el bucle corre, generando:
f[0] = f[1] ( => f[0] =1)
f[1] = 2
f[0] = 3
f[1] = 5
Efectivamente resultando cada paso la suma de los dos anteriores. Cuesta verlo, pero produce el resultado esperado. Muy ingenioso, de verdad