I like it this way, it compiles on the compilers where the parent's doesn't (see http://news.ycombinator.com/item?id=2323964), I believe it fits to all standards, doesn't depend on any undefined behavior, it doesn't assume any convenient type size, it doesn't call exit, it doesn't crash and also it doesn't use any relational operators. It even uses only two arithmetic operators, and only on integers.
#include <stdio.h>
#include <stdlib.h>
int pk( int i )
{
static int (*v[])( int ) = { pk, abs };
printf( "%d\n", i );
return v[ i/1000 ]( i+1 );
}
int main( void )
{
pk( 1 );
return 0;
}