【发布时间】:2022-11-01 23:59:49
【问题描述】:
一个大小为 NxN 的二维数组,由 1 和 0 组成。
邻居是索引的北/南/西/东的 1
递归查找数组中的索引有多少个邻居(也包括与其他邻居接触的邻居)。
对于我构建的数组,我应该得到 6,但是我得到了一个堆栈溢出异常,我不明白为什么。 下面是我的 7x7 数组,对于索引 2,5 应该返回 6 的值。
static void Main(string[] args)
{
int[,] arr = { {0,0,0,1,0,0,0 },{1,0,0,1,1,0,0 },{0,0,0,0,1,1,0 },{0,0,0,0,1,0,0 },{0,0,0,0,0,0,0 },{0,1,1,1,1,0,0 },{1,0,0,1,0,0,0 } };
Console.WriteLine(Recursive(arr,2,5));
Console.ReadLine();
}
static public int Recursive(int[,] arr,int x,int y)
{
if(x < 0 || y < 0 || x > arr.GetLength(0) || y > arr.GetLength(1))
{
return 0;
}
// check if a 1 has neighbors
if (arr[x, y] == 1)
{
return 1 + Recursive(arr,x-1,y) +Recursive(arr, x + 1, y) + Recursive(arr, x, y -1) +Recursive(arr, x, y + 1);
}
else
{
return 0;
}
}
【问题讨论】:
-
欢迎来到堆栈溢出!这是您开始熟悉using a debugger 的好机会。当您在调试器中单步执行代码时,哪个操作首先会产生意外结果?该操作中使用的值是什么?结果如何?预期的结果是什么?为什么?要了解有关此社区的更多信息以及我们如何为您提供帮助,请从 tour 开始并阅读 How to Ask 及其链接资源。
-
从一个更简单的情况开始 - 一个 1x2 数组,其中两个值都设置为 1,然后使用坐标
0,0运行调用。这将对0,1进行递归调用。这反过来将递归调用0,0,而这又将...