c++ - 如何在递归函数中计算返回结果?

标签 c++ recursion return

到目前为止,我认为我理解返回是如何工作的,但是一旦我了解了递归,我想我比最初想的更迷茫了。

假设,我有一个计数函数,计算一个字符在字符串中弹出的次数。

int frequency(char ch, string input, int pos) {
   if (pos == inputString.length()) {
      return 0;
   }

   if (inputString[pos] == ch) {
      return 1 + frequency(ch, inputString, pos + 1);
   }
   else {
      return frequency(ch, inputString, pos+1);
   }
}

如果我将字符串“Jeff”传递给它并查找“f”,它会返回值 2

那么,它如何知道何时停止?

  • return 0 是否结束任何返回类型为 int 的方法?

  • 如果是这样,为什么它仍然返回 2 的值,当 final 返回说返回 0 时?

最佳答案

最后一次返回

return 0;

只是函数在递归过程中最后一次被调用。这是在某个时候停止递归所必需的。对于在执行最后一个其他返回语句之前的调用,例如:

return 1 + frequency(ch, inputString, pos + 1);

因此 0 与 1 和递归的任何先前结果相加。

附言: 只要函数返回语句再次调用该函数,递归就会继续。仅当 return 仅返回某些内容(无需再次调用函数)时,递归才会停止。

下面是一个更简单的例子,计算所有整数的总和,直到 N:

int calcSum(int N){

    if ( N == 1 ) return 1;          // recursion stops here

    return N + calcSum( N-1 );       // otherwise continue to add up 

}

一个函数中的多个return 语句对于递归来说并不特殊。该函数只在它遇到的第一个返回时返回。

关于c++ - 如何在递归函数中计算返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37308418/

相关文章:

java - 如何在数组递归方法中找到最小值?

c++ - strcat 查询 (string.h)

algorithm - 动态算法查找数组中 "accessible"数字的乘积的最大和

c++ - Cocos2d-x V3.2。使用 RenderTexture 创建 Sprite

c - 返回char数组中数字的递归函数

c - C 中函数的指针返回

xml - 无法阻止 PowerShell 更改返回对象的类型

仅当表达式的值不是 None 时才返回表达式的 Python 语法

c++ - 使用 (MFC) CList<T, T&> 而不是 CList<T, const T&> 的任何理由?

c++ - 找不到代码 vector 使用中的错误