Your dst pointer is not the same pointer in the recursively called function, pass it as an argument instead.
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);
}
Why you want to do this with recursion is completely beyond me by the way, it only wastes time and space.