Yes, it is.
If it 'tracks' something it means it has to have a 'state'. The state it transitions to depends on the presented inputs. What you have implemented is just an efficient way to encode a simple state machine, just like the old-school hardware method of a EPROM with some address inputs being the current state remembered in some flipflops, some address lines use as input, and the EPROM data outputs as the output of the state machine and the new state (that get's fed back to the input again).
Even a simple binary counter is basically a state machine.
Your code would not work without the 'static' qualifier. And you could rewrite it as a big if/switch statement.
Here's an excerpt of some code I wrote long ago that basically achieves more or less the same as your code, just written in another way that most people would qualify as a state machine
It handles an encoder that goes through the whole cycle per detent.
void handle_encoder(void)
{
if (state==0)
{
if (encoder_a) state=1;
if (encoder_b) state=4;
}
else if (state==1)
{
if (encoder_b) state=2;
else if (!encoder_a) state=0;
}
else if (state==2)
{
if (!encoder_a) state=3;
}
else if (state==3)
{
if (!encoder_b)
{
encoder_flag=2;
state=0;
}
}
else if (state==4)
{
if (encoder_a) state=5;
else if (!encoder_b) state=0;
}
else if (state==5)
{
if (!encoder_b) state=6;
}
else if (state==6)
{
if (!encoder_a)
{
encoder_flag=1;
state=0;
}
}
else state=0;
}
It could be rewritten as a table driven state machine and would likely be exactly like your code