I'm writing a compiler in Java and needed a gensym function. I decided that I would just try to generate unique 64 bit integers and convert them to base 36 strings. I jotted down a recursively defined function to generate the sequence. When I tested it in C, the sequence up to $n=2^{20}$ contained no duplicates. So now I'm curious if it's possible to determine, without occupying my computer for the next two weeks, if the function is a one-to-one correspondence on $[0,2^{64})\rightarrow[0,2^{64})$. The function is defined like this:
$f(0)=1$
$f(1)=3$
$\forall n > 1, f(n)=\mathord{\sim}f(n - 1) \verb|^| (37 \cdot f(n - 2))$
To be clear, the tilde is bitwise complement, and the caret is bitwise xor.
I was a math major in college but it's been a while since I've really done this sort of thing and I'm just not sure how to tackle this. Anyway, first question, so, sorry if I was little too verbose.