大伙都知道递归就是一个函数自己调用自己,可是对于递归的过程我总是很迷惑。今天正好看到一个程序,就拿来仔细分析分析。
#include<stdio.h>
void reverse(const char *const sptr)//将字符串反着输出
{
if(sptr[0]=='\0'){
return;
}
else{
reverse(&sptr[1]);
putchar(sptr[0]);
}
}
int main(void)
{
char s[50];
printf("输入字符串\n");
gets(s);
printf("相反顺序输出:\n") ;
reverse(s);
}
这是一个让我们输入字符串,再对字符串翻转输出的程序。
函数reverse()用递归编写。我们知道字符串的最后一个字符为空字符‘\0’,所以递归的结束条件为==‘\0’。
假设我们输入了字符串abc,这时候'\0'会被加在数组的末尾,即为abc\0。
调用reverse()函数,先进入if判断,a!=’\0‘,故执行reverse(&sptr[1]),这相当于把原来数组abc\0的子数组bc\0赋给reverse函数。接着把a\0赋给reverse,最后\0==\0,就return。