Il suffit dutiliser une variable pour la dernière valeur et une autre pour la précédente :
long fib(unsigned n) { if (n <= 1) return n; long l1 = 0, l2 = 1; while (n-- > 1) { long aux = l1; l1 = l2; // recopier l2 dans l1 l2 += aux; // l2 = somme des 2 précédents } return l2; }