在int main()中实现递归函数[c ++]

时间:2018-07-17 09:19:32

标签: c++ function recursion

我在程序中使用了递归泛洪函数。该程序在下面给出

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程序。这也不是完整的代码。代码中未提供初始化数组值的部分。

3 个答案:

答案 0 :(得分:2)

简短回答:否

您需要传递参数以使代码正常工作。 Main不带任何参数。

然后我觉得有必要问你为什么要这么做?将代码分解为定义明确的细小部分,执行特定任务是一种好的编程习惯。然后将其隔离在一个函数中,并为其他所有人记录/描述该函数,以了解其功能。

因此,即使您可以做到,您也应该避免这样做。

答案 1 :(得分:1)

DFS可以不使用递归而仅使用堆栈来实现,因此您可能希望看到以下内容: https://www.codeproject.com/Tips/723337/Depth-First-Search-DFS-Non-recursive

此代码是针对树实现的,但是算法相同。

答案 2 :(得分:0)

局部非静态变量,包括诸如array之类的数组,默认情况下不会初始化。它们的值将是不确定的,并且几乎是随机的。

除初始化变量外,以任何方式使用此类变量都会导致undefined behavior

之所以会这样,是因为您在不初始化的情况下比较了数组中的值。

此外,也是未定义行为的来源,您没有边界检查!这意味着您的函数可以(并且将)超出数组的范围。


要解决第一个问题,您需要初始化数组:

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

要解决第二个问题,您需要在函数中添加边界检查:

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