我只是想知道我对递归的使用是否正确。该代码符合预期目的;但是,我不确定它是否真的在进行递归。我尝试过跟踪我的程序,但我不明白为什么我的输出是正确的。基本上,该程序接受一个由空格和“*” Blob 组成的数据文件,并且我的程序应该递归地计算给定空格和 Blob 数组中特定行和列的 Blob 数量。问题是,我不确定为什么当我使用北、南、东、西等变量时,它能够成功地将值返回给我,因为似乎在递归过程中,每个变量都存在于该调用中。另外,我不确定为什么 North = count(row,col+1) 会给出北的值,因为每次我迭代计数的递归时,它似乎并没有停止在北的确定值,因为就像它似乎没有停下来并说返回 1 作为北。
public static int count(int row, int col) {
int north = 0, south = 0, east = 0, west = 0;
if (map[row][col] == BLOB) {
map[row][col] = MARKED;
if (map[row][col+1] == BLOB) {
north = count(row,col+1);
}
//Go South
if (map[row][col-1] == BLOB) {
south = count(row, col-1);
}
//Go East
if (map[row+1][col] == BLOB) {
east = count(row+1, col);
}
//Go West
if (map[row-1][col] == BLOB) {
west = count(row-1, col);
}
return (1 + north + south + east + west);
}
return 0;
最佳答案
递归只是让一个方法调用它的自身。因此,这就是递归。
您是正确的,每个变量仅存在于每个调用的范围内。然而,它们是根据其他递归调用来定义的。
这段代码似乎正在尝试填充一个数组(最终情况是当数组的一部分被填充时)。这就是为什么它似乎不会停止调用自身(因为在满足最终情况之前需要进行多次递归调用)。
关于java - 递归的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58404010/