If 2f (0) k, then you can calculate this function in O (log n) time (using squaring modulo k).
r = f(0) * 2^n mod k
return 2 * r >= k ? k - r : r
. , 0 <= f (n) k/2 f (n).
Python, , (f) (g).
def f(n, k, z):
    r = z
    for _ in xrange(n):
        if 4*r <= k:
            r = 2 * r
        else:
            r = k - 2 * r
    return r
def g(n, k, z):
    r = (z * pow(2, n, k)) % k
    if 2 * r >= k:
        r = k - r
    return r
import random
errs = 0
while errs < 20:
    k = random.randrange(100, 10000000)
    n = random.randrange(100000)
    z = random.randrange(k//2)
    a1 = f(n, k, z)
    a2 = g(n, k, z)
    if a1 != a2:
        print n, k, z, a1, a2
        errs += 1
    print '.',