首页 > 解决方案 > 不理解此递归函数中的返回 (C++)

问题描述

    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...") 的位置?

标签: c++recursion

解决方案


要理解的关键是,return后面跟着一些表达式不会立即返回一些值。它计算表达式(表示递归调用),然后返回计算表达式计算的值。您缺少在返回某个值之前完成的中间计算。

在这个中间计算中,由于递归,它将启动另一个中间计算,其结果将在计算后返回。这些中间计算不断启动,直到达到递归的基本情况。

如果没有最后的return语句,因为函数具有非 void 返回类型,您会遇到未定义的行为。


推荐阅读