我正在尝试解决这个递归练习:
在多维板(M x N)中,每个元素都可以是空的,也可以是满的。
“污点”大小是相邻且值为“x”的元素的数量。
| 0 | 1 | 2 | 3 | 4 |
0 | | x | | | x |
1 | x | | | x | x |
2 | | | x | x | |
3 | x | | | | |
4 | x | x | x | | |
public static int stain (char [][] mat, int row, int col)
public static int size(boolean[][] a, int i, int j) {
boolean[][] temp = new boolean[a.length][a[0].length];
if (exists(a, i, j) && isStained(a, i, j)) {
temp[i][j] = true;
if (i == a.length - 1) {
return size(a, i, j, temp, 1, 0, false, true);
}
return size(a, i, j, temp, 1, 0, false, false);
}
return 0;
}
private static boolean exists(boolean[][] a, int i, int j) {
if ((i < 0) || (i >= a.length) || (j < 0) || (j >= a[0].length)) {
return false;
}
return true;
}
private static boolean isStained(boolean[][] a, int i, int j) {
if (a[i][j] == false) {
return false;
}
return true;
}
private static int size(boolean[][] a, int i, int j, boolean[][] temp, int count, int iLenght, boolean progress,
boolean dir) {
if (exists(a, i - 1, j - 1)) {
if (isStained(a, i - 1, j - 1)) {
if (temp[i - 1][j - 1] == false) {
progress = true;
temp[i - 1][j - 1] = true;
return size(a, i - 1, j - 1, temp, ++count, iLenght, progress, dir);
}
}
}
if (exists(a, i - 1, j)) {
if (isStained(a, i - 1, j)) {
if (temp[i - 1][j] == false) {
progress = true;
temp[i - 1][j] = true;
return size(a, i - 1, j, temp, ++count, iLenght, progress, dir);
}
}
}
if (exists(a, i - 1, j + 1)) {
if (isStained(a, i - 1, j + 1)) {
if (temp[i - 1][j + 1] == false) {
progress = true;
temp[i - 1][j + 1] = true;
return size(a, i - 1, j + 1, temp, ++count, iLenght, progress, dir);
}
}
}
if (exists(a, i, j - 1)) {
if (isStained(a, i, j - 1)) {
if (temp[i][j - 1] == false) {
progress = true;
temp[i][j - 1] = true;
return size(a, i, j - 1, temp, ++count, iLenght, progress, dir);
}
}
}
if (exists(a, i, j + 1)) {
if (isStained(a, i, j + 1)) {
if (temp[i][j + 1] == false) {
progress = true;
temp[i][j + 1] = true;
return size(a, i, j + 1, temp, ++count, iLenght, progress, dir);
}
}
}
if (exists(a, i + 1, j - 1)) {
if (isStained(a, i + 1, j - 1)) {
if (temp[i + 1][j - 1] == false) {
progress = true;
temp[i + 1][j - 1] = true;
return size(a, i + 1, j - 1, temp, ++count, iLenght, progress, dir);
}
}
}
if (exists(a, i + 1, j)) {
if (isStained(a, i + 1, j)) {
if (temp[i + 1][j] == false) {
progress = true;
temp[i + 1][j] = true;
return size(a, i + 1, j, temp, ++count, iLenght, progress, dir);
}
}
}
if (exists(a, i + 1, j + 1)) {
if (isStained(a, i + 1, j + 1)) {
if (temp[i + 1][j + 1] == false) {
progress = true;
temp[i + 1][j + 1] = true;
return size(a, i + 1, j + 1, temp, ++count, iLenght, progress, dir);
}
}
}
if (iLenght >= a.length || progress == false) {
return count;
} else {
++iLenght;
if (dir == true) {
i = i + iLenght;
} else {
i = iLenght;
}
progress = false;
return size(a, i, j, temp, count, iLenght, progress, dir);
}
}
问题内容: 我不是SQL专家,但是如果有人可以帮助我。 我使用递归CTE来获取如下值。 Child1 –> Parent 1 Parent1 –> Parent 2 Parent2 –> NULL 如果数据填充出错,那么我将遇到以下类似情况,因此CTE可能会进入无限递归循环并给出最大递归错误。由于数据量很大,因此我无法手动检查此 错误数据 。请让我知道是否有办法找到它。 Child1 –> Par
问题内容: 我将以说这是家庭作业为开头。我只是在寻找一些指示。我一直在为此绞尽脑汁,对于我的一生,我只是不明白。我们被要求在列表中找到最小的元素。我知道我在这里需要一个子列表,但是在那之后我不确定。任何指针都很棒。谢谢。 问题答案: 从最一般的意义上讲,递归是一个基于分解工作的概念,然后将较小的工作分派给自己的副本。为了使递归正常工作,您需要三件事: 工作细目。您如何使每个步骤变得“简单”? 递归
我想知道我可以在给定的数组中计算2条特定路径吗。 > < li> 如何返回从[0][0]到[m][n]的最短(或最长)路径?我设法递归地遍历数组,但是我不知道如何“保存”路径并检查哪一个返回的路径更小。 第二个请求是一个我已经纠结了很长时间的问题,但我看到了关于使用和计算这些数组中的值的其他问题。
我试图找到最小元素并删除它,但不幸的是我不能。我想得到一些帮助,这是我的代码。 我在Class Stack中只有这些方法:equals,is空,pop,推送,top,toString(主要方法)。 提前感谢。
我有TreeNode类——非二叉树(
本文向大家介绍C++ 中二分查找递归非递归实现并分析,包括了C++ 中二分查找递归非递归实现并分析的使用技巧和注意事项,需要的朋友参考一下 C++ 中二分查找递归非递归实现并分析 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑不全边界问题。 用非递归简单分析一下,在编写过程中,如果编写的是以下的代