[英]Why does this recursive function return the wrong value?
在构建递归函数时,我继续遇到问题,该函数的返回值与我期望它返回的值不同。 我相当确定它与函数的递归性质有关,但是我不知道发生了什么。
int foo(std::string, int = 0);
int main() {
std::string testString = "testing";
std::cout << foo(testString);
}
int foo(std::string givenString, int numberToReturn) {
if (givenString.length() == 0) {
std::cout << "Number to return before actually returning: " << numberToReturn << "\n";
return numberToReturn;
}
if (true) {
numberToReturn++;
}
std::string newString = givenString.erase(0, 1);
foo(newString, numberToReturn);
}
在这个缩小的示例中,我具有带字符串的foo函数和一个默认值为0的int值。给定字符串“ testing”且没有整数,我希望递归函数为每个调用增加numberToReturn并将新值传递给下一个电话。 这一定是正确的,因为如果在达到基本情况时我退出numberToReturn,我将获得期望值(在这种情况下为7)。 但是,只要我返回该值,它就会更改为更大的数字(在我的情况下为6422160)。
如此说来,为什么数字在返回时会发生变化,如何防止这种变化发生或以其他方式返回正确/期望的值?
编辑:对于将来遇到类似问题的任何人,我的问题是每次重新调用都必须返回某些内容,而不仅仅是最后一个。 就我而言,返回函数foo的最后一行即可解决问题。 不为每个函数调用返回任何东西会导致未定义的行为。
您的函数必须始终以return结尾,否则,函数将返回一些随机的未初始化值。 例如
int foo( int x )
{
if ( x == 0 )
{
return x;
}
foo(x-1);
}
大致相当于:
int foo( int x )
{
if ( x == 0 )
{
return x;
}
foo(x-1);
return someRandomValue();
}
您真正想要的是:
int foo( int x )
{
if ( x == 0 )
{
return x;
}
return foo(x-1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.