Estoy tratando de hacer este código recursivo, pero por alguna razón no funciona

Estoy tratando de hacer este código recursivo, pero por alguna razón no funciona.

void compress_spaces(char *str) { char *dst = str; for (; *str; ++str) { *dst++ = *str; if (isspace(*str)) { do ++str; while (isspace(*str)); --str; } } *dst = 0; } 

EDIT: he intentado esto:

 void text_r(char *str) { char *dst = str; if(*str=='\0')return ; *dst++ = *str; if (isspace(*str)) { do ++str; while (isspace(*str)); --str; }//Missing brace from orig is this ok? return text_r(str++); } 

No funciono ¿Algunas ideas?

Su puntero dst no es el mismo puntero en la función llamada recursivamente, páselo como un argumento.

 void text_r(char *dst, char *str) { if (*str=='\0') return; *dst++ = *str; if (isspace(*str) while (isspace(*str++)); else ++str; return text_r(dst, str); } 

La razón por la que quieres hacer esto con recursión me supera por completo, solo desperdicia tiempo y espacio.

Quizás esta pregunta de SO pueda ayudarte. Resuelve tu problema con una expresión regular.