func fib(n) if 1 >= n then return n; end; var fib_n := 1; (* fib(n) *) var fib_n1 := 0; (* fib(n-1) *) var r := 0; while n >= 2 do (* calculate fib(n+1) *) r := fib_n + fib_n1; (* update fib(n-1) and fib(n) *) fib_n1 := fib_n; fib_n := r; n := n + (-1); end; return r; end;