#include<stdio.h> char s[100];char *p=s;//这是一个递归算法实现多个字符串的逆序输出//以下为例//输入://s1 s2 s3//输出://s3 s2 s1//i表示命令行参数的个数//如果命令行没输入参数,默认参数有一个参数,是程序的路径//所以这里i=1int main(int i,char *q){ //加了参数trace函数的调用的变量 static int count_main=0; static int count_if=0; if(!--i) //第一次判断的时候i=1,--i=0,!0=1,所以满足条件 { gets(s); //读入多个字符串 printf("第%d次进入if",++count_if); //输出第几次进入if语句 while(*p)++p; //循环p向后移动,找到字符串的结尾,注意空格不是结尾 for(;p---s;*p==32?*p=0,main(i,p):0); //循环使p往前移动,直到遇到一个空格 //这时候执行*p=0,main(i,p) //*p=0把空格赋值成空字符\0 //此时i=0,p指向第三个字符串前的空字符 //这样就把最后一个字符串分离了出来 //然后再次调用main函数 //这时--i=-1,!-1==0条件不成立 //所以跳过条件语句进入下面的输出 //这样就把最后一个字符串第一个输出 //这时程序回到第一次调用的main函数继续for循环 //原理同上把倒数第二个字符串也输出 return main(i,p); //输出第一个字符串 } printf("\n第%d次调用main函数,i=%d,输出",++count_main,i); //输出一个分离出来的字符串 *++q?putchar(*q),main(2,q):0; ~i||putchar(32); //输出空格}完全可以另外定义一个函数用递归实现直接把main定义成递归的真够懒的

评论