//原程序:
#include
void reverse()
{
char c;
if((c = getchar()) != '\n') /*c =getchar()先把键入的一个字符赋值给c,再判断 键入的是否为回车*/
reverse(); /*若当前键入不是回车,再次调用一次自定义函数,注 意此时第一次调用还没有结束;若当前键入回车,即 输入字符串结束符时,则无任何操作,进入下一轮判 断*/
if(c != '\n') /* 如果当前不是回车就输出当前的字符。由于最后一 个字符必定是回车所以最后一次调用相当于无任何 操作,此时函数并不是结束,而是返回上一层调用 点即倒数第二次调用,去执行上次未执行的语句if (c != '\n') putchar(c);这时就输出了倒数第一 个非空字符,此后再返回倒数第三次调用的断点输 出倒数第二个非空字符,以此类推……实现倒序输 出。*/
putchar(c);
}
void main()
{
reverse(); //程序开始,第一次调用自定义函数reverse()
printf("\n");
}
//我的程序:
#include
#include
void main()
{
char a[100];
int i,j;
printf("请输入一个字符串:");
scanf("%s",&a);
j=strlen(a);
printf("它的倒序字符串为:");
for(i=j-1;i>=0;i--)
printf("%c",a[i]);
printf("\n");
}
reverse()函数有递归调用,当你输入abcdef时,
第1次调用:c=a,
第2次调用:c=b,
第3次调用:c=c,
第4次调用:c=d,
第5次调用:c=e,
因为前面的调用必须在后面的调用执行完后才执行putchar(c);所以
最后一次调用并输出:e,然后返回上一层调用,输出d,再返回上一层调用,输出c,依次类推,