>>309 311 に倣って unsigned char バージョン.
int t[]={2,8,16};
char *s = "0123456789ABCDEF";
void g(int n, unsigned char c) { if (c) g(n, c/t[n]), putchar(s[c%t[n]]); }
void h(int n, unsigned char c) { if (n+1) { putchar(' '), g(n, c>0?c:-c), h(n-1, c);} }
void f(unsigned char c) { if (c) f(c-1), c ? h(2,c) : printf(" 0 0 0"), putchar('\n'); }
int main() { f(0xff); }