簡體   English   中英

為什么此遞歸函數返回錯誤的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM