簡體   English   中英

在int main()中實現遞歸函數[c ++]

[英]Implement a recursive function in int main() [c++]

我在程序中使用了遞歸泛洪函數。 該程序如下

void floodfill(int x, int y, int &array[100][100])
{
 if (array[x][y]==0)
  {
   array[x][y]=1;
   floodfill(x+1, y, array);
   floodfill(x, y+1, array);
   floodfill(x-1, y, array);
   floodfill(x, y-1, array);
  }
}

int main()
{
   int x= 1;// x and y is the point to start the floodfill
   int y= 10;
   int array[100][100] = {0};

   floodfill(x, y, array); 
}

我想知道是否有一種方法可以編程此遞歸函數,使其完全在int主循環內發生而不創建函數?

PS:-我知道先定義一個函數然后在主程序中使用它是一種好的編程習慣,但是我正在從事的項目的體系結構無法使我使用函數進行洪水填充。 因此,我需要int主要部分中完整的Floodfill程序。這也不是完整的代碼。 代碼中未提供初始化數組值的部分。

簡短答案:不可以。

您需要傳遞參數以使代碼正常工作。 Main不帶任何參數。

然后,我覺得有必要問你為什么要這么做? 將代碼分解為定義明確的細小部分,執行特定任務是一種好的編程習慣。 然后將其隔離在一個函數中,並為其他所有人記錄/描述該函數以了解其功能。

因此,即使您可以做到這一點,您也應該避免這樣做。

可以僅使用堆棧而無需遞歸地實現DFS,因此您可能希望看到以下內容: https : //www.codeproject.com/Tips/723337/Depth-First-Search-DFS-Non-recursive

該代碼是為樹實現的,但是算法是相同的。

局部非靜態變量,包括像array這樣的array ,默認情況下不會初始化。 它們的值是不確定的 ,似乎幾乎是隨機的。

除初始化變量外,以任何方式使用此類變量都會導致未定義的行為

這就是發生的原因,因為您在未初始化的情況下比較了數組中的值。

此外,它也是不確定行為的來源,您沒有邊界檢查! 這意味着您的函數可以(並且將)超出數組的范圍。


要解決第一個問題,您需要初始化數組:

int array[100][100] = { 0 };  // Set all elements to zero

要解決第二個問題,您需要在函數中添加邊界檢查:

if (x < 0 || x >= 100 || y < 0 || y >= 100)
    return;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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