【发布时间】:2019-10-13 08:27:53
【问题描述】:
string stringtest(const string& s, int size, int index, string res){
if(index == size){return res;}
char c = s.at(index);
if(isalpha(c)){ res+= c ; }
**return** stringtest(s,size,index+1,res);
}
string stringtest(const string& s){
int size = s.size();
string r = "";
return stringtest(s,size,0,r);
}
int main(){
cout << stringtest("1a2bc3def") << endl;
return 0;
}
你好。这是我为学习递归而编写的一段代码。
我不明白的是辅助函数 stringtest(string,size,index,result) 中返回的功能 - 我只想在最后返回结果,为什么我每次都返回函数调用?
编辑
所以.. 是不是因为当我返回 res 时它会返回到调用函数,并且由于我从不返回那些函数调用,所以它永远不会回到我在 main 中调用 stringtest("1a2...") 的位置?
【问题讨论】:
-
该函数有一个字符串返回类型。如果您没有该 return 语句,它将无法编译。将 return 语句视为两个语句。一个声明一个本地字符串,该字符串采用递归调用函数的结果。第二个实际上返回它
-
使用调试器并单步执行代码。几分钟后,您应该正确理解它。更好的是,把每一步得到的结果写在纸上。
-
总是允许并且相对容易添加一对可移动的 cout 来显示说明递归/递归操作的“图形”。参见示例:stackoverflow.com/a/58324382/2785528。