Impresión en base 2 en C

Un método recursivo 

Introducción

Ésto fue inspirado por la necesidad de mi hermano de imprimir un número en base 2. El problema es que no habían visto strings y todos los métodos basados en divisiones sucesivas obtienen los dígitos "al revés". Después de pensar en stacks y demás soluciones similares se me ocurrió que podía aprovechar el stack implícito en las llamadas recursivas a funciones.

Solución recursiva

void print_conv_bin_rec(int num)
{
    if (num == 0)
        return;

    print_conv_bin_rec(num / 2);

    printf("%d", num % 2);
}

Obviamente no sirve para números negativos y no maneja el caso del cero (hay que imprimirlo manualmente).

Solución bit a bit

Otra solución que se me ocurrió, solo para base 2, es recorrer bit  a bit el número. El problema es que no habían visto el operador << y además muestra los ceros iniciales (aunque eso puede resolvcerse fácilmente).

#include <limits.h>
#include <stdio.h>

int main(void)
{
    int num, bit;
   
    printf("Ingrese el natural a convertir: ");
    scanf("%d", &num);

    if (num <= 0)
    {
        printf("No es natural\n");
        return 1;
    }

    for (bit = CHAR_BIT * sizeof(int) - 1; bit >= 0; bit--)
        printf("%d", (num & (1 << bit)) ? 1 : 0);
    printf("\n");

    return 0;
}