升主动脉瘤样扩张症状:C++的递归函数问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 04:49:28
#include<iostream>
using namespace std;

void reverse(char *s);

int main() {
char str[] = "This is a test";

reverse(str);

return 0;
}

void reverse(char *s) {
if(*s)
reverse(s+1);
else
return;

cout<<*s;
}
上面的程序可以把字符串倒序输出,不大明白后边reverse函数的代码是怎么回事,希望高手指点!谢谢

假设S里有个两字符吧,当第一次调用reverse(s)时,判断*s是否为空,即S里的第一个字符是否存在,如果有的话,就调用reverse(s+1),即对S里的第二个字符进行判断。不为空,就再调用,对下一个进行判断,因为S里只有两个字符,所以在第三次调用时,直接返回。返回到reverse(s+1)中,之后将*s+1打印出来,即打印第二个。然后再返回到reverse(s)中。再将*s打印,即打印第一个字符。这样就实现了反序输出。
即这个函数的功能是,对字符串进行判断,从第一个字符开始,判断其是否为空,不为空,则调用,对下一个判断,直到为空,则返回,从最里层打印输出,即最后一个字符打印输出。

if(*s) 判断指针s是否有指向,若有则向后推一位,代如原函数继续判断,直到字符串尾,指针s无指向时,返回上一层,并输出当前指针s指向的字符,依次直到字符串开头。

重点就在reverse函数

首先要理解 *s 指向的是字符数组str[] = "This is a test" 的第一个字符'T'

那么s+1就指向后面一个字符