到目前为止,我认为我理解返回是如何工作的,但是一旦我了解了递归,我想我比最初想的更迷茫了。
假设,我有一个计数函数,计算一个字符在字符串中弹出的次数。
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/