#include
using namespace std;
void reverse();
int main()
{
printf("enter a sentence: ");
reverse();
return 0;
}
void reverse()
{
char c;
scanf("%c",&c);
if(c != '\n')
{
reverse(); //这一步以后转到哪里执行语句
printf("%c",c);
}
}
如果你follow过code,通过callstack可以看出其执行过程以及运算流程;在这里简单的解释一下:在main()中,第一次调用reverse(),进入reverse()后,定义了一个char变量(是放在栈中的),接下来检测输入是否为换行,如果不换行(这里应该注意的是此处局部变量的生命周期并未结束,所以保存在栈中),就继续再次执行reverse();直到遇到换行;接下来的输出过程就是刚才定义的变量的出栈过程。这里应该注意的是c变量不是同一个变量;
转到这个函数的开始位置
自己调用自己,直到c == '\n',这个函数开始return(你将这个函数最后一行加上return,可以帮助你理解),把最后的字符输出来,在将倒数第二个输出来,依次。。。这个函数实现的功能是将字符串反转。
打个比方,就比如一个放倒的长桶,先是将一个个字符放入桶中,遇到换行的时候,一个个字符在一个个从桶中弹出来;个人感觉楼主还没有掌握递归的思想,建议看看《数据结构与算法》,关于递归思想的详细介绍。还有C/C++内存机制;看懂了,你的思路就清晰了!
这就相当于输入hello这个单词,第一次调用reverse()函数,输入h,因为不是回车所以输出h并继续调用reverse()函数,直到o后面继续调用reverse()函数,输入'\n'(即回车),调用reverse()中的if函数判断不符合直接结束,跳出reverse()函数。