我继续遇到构建递归函数的问题,其返回值与我期望它返回的值不同。我相当肯定它与函数的递归性质有关,但我不明白发生了什么。
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。给出字符串&#34; testing&#34;并且没有整数,我希望递归函数为每个调用递增numberToReturn并将新值传递给下一个调用。这必须是部分正确的,因为如果我在达到基本情况时输入numberToReturn,我得到预期值(在这种情况下,它将是7)。但是一旦我返回该值,它就会变为更大的数字(在我的情况下为6422160)。
所以说,为什么数字会在返回时发生变化,如何防止这种变化发生或以其他方式返回正确/期望值?
编辑:对于将来遇到类似问题的人,我的问题是每次重新调用都必须返回一些东西,而不仅仅是最后一个。在我的例子中,返回函数foo的最后一行解决了这个问题。不为每个函数调用返回一些内容会导致未定义的行为。
答案 0 :(得分:-2)
如果您的函数没有返回一些随机未初始化的值,那么您的函数必须始终以return结尾。例如
np.genfromtxt(f, delimiter=',', dtype=None)
大致相当于:
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();
}