看不懂一个c语言递归程序,希望高手解释说明下

下面这个程序是将一个字符串倒着输出。只能看懂当s长度不是1的时候,会不断的return长度短1的s,直到s只有字符f,然后就输出f,但是什么都没有return,那个时候递归函数不是应该结束了吗?怎么还在运行?又是为什么会输出其它的字符的?
#include<stdio.h>
#include<string.h>
void reverse(char s[])
{
int len;
len=strlen(s);
if(len==1)
{
printf("%c",s[0]);
}
else
{
reverse(s+1);
printf("%c",s[0]);
}
}
void main(void)
{
char s[20]={'\0'};
printf("请输入一窜字符:");
scanf("%s",s);
reverse(s);
printf("\n");
}

void reverse(char s[]) // 递归法倒着输出字符串
{
int len;
len=strlen(s);
if(len==1) // 串长为1则直接输出,也是递归结束条件
{
printf("%c",s[0]);
}
else
{
reverse(s+1); // 从下一字符倒着输出
printf("%c",s[0]); // 输第一个字符
}
}
这个递归程序是正确的,你不理解的原因,对递归原理没有完全搞懂造成的。
要跟你解释半天你才能明白,一旦你明白了,就觉得递归很简单,
递归结束,只表示这一次结束,堆栈中还有一大串子程序还未完呢。要逐一递归
返回。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-07
输出其他字符的原因是每次递归调用reverse(s+1);后都会执行到printf("%c",s[0]);所以其他字符都打印出来了
相似回答