C语言字符串单词逆序输出

想要实现字符串里的单词逆序输出,如 给定“how are you”,应输出“you are how”
下面的代码想要利用递归算法实现,但发现运行之后没实现,求解!万分感谢!

#include<stdio.h>
#include<string.h>
void fun(char *p,int i,int len);

int main()
{
  char a[50]="how are you";
  int lenth=strlen(a);
  printf("len=%d\n",lenth);
  puts(a);
  fun(a,0,lenth);
  printf("\n");
}


void fun(char *p,int i,int len)
{ 
  for(;i<len;i++)
      if(p[i]==' ')
      fun(p,i+1,len);

  while(p[i-1]!=' ')
      i--;
  while(p[i]!=' ' && p[i]!='\0')
  { printf("%c",p[i]); i++; }
  printf(" ");

}

 void fun(char *p,int i,int len)
{ 


  while(p[len-i-1]!=' ')
      i++;
  while(p[len-i-1]==' ')
  { 
    for(int j=i;j>0;j--){
    printf("%c",p[len-j+1]);
    }
     printf(" ");
     fun(p,i,len);
    }

}

void fun(char *p,int i,int len)
{
int j = i;//记录单词起始位置
int m = 0;
int n = 0;
for(;i<len;i++)
{
if(p[i]==' ')
{
m = i;//记录单词结束位置
fun(p,i+1,len);
break;
}

}
//为了输出最后一个单词
if (m == 0)
{
    m=len;
}
//输出单词
for (n = j;n<m;n++)
{
    printf("%c",p[n]);

}
//如果不是第一个单词就输出空格
if (j != 0)
{
    printf(" ");
}

}

void fun(char *p,int i,int len)
{ int j;
  while(i<len && p[len-i-1]!= ' ')
      i++;
  j=i;
  while(p[len-j]!=' ' && j>0)
  { 

    printf("%c",p[len-j]);
    j--;
  }
  printf(" ");
  if(i<len)
      fun(p,i+1,len);
}

 #include<stdio.h>
#include<string.h>

void fun(char *p,int n=1)
{ 
    int i;
    for( i=0; ;i++)
    {
        if(p[i]==' ')
        {
            fun(p+i+1,n+1);
            break;
        }
        else if(p[i]==0)
            break;
    }

    i=0;
    while(p[i]!=' ' && p[i]!='\0')
    { printf("%c",p[i]); i++; }
    if(n!=1) printf(" ");//n=1时是第一个单词,后面不再输出空格。
}
void main()
{
    char a[]="how are you";
    puts(a);
    printf("\n");
    fun(a);
    printf("\n");
}