C++的递归函数问题
来源:百度知道 编辑:UC知道 时间:2024/06/05 14:34:04
#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函数的代码是怎么回事,希望高手指点!谢谢
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就指向后面一个字符