您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。
我正在研究一个问题,想生成一个特定的模式这是>
1000 1100 1110 1111 0100 0110 0111 0010 0011 0001
使用递归和for循环,但是当我编写代码时,它在线程“ main” java.lang.StackOverflowError中给了我异常
public class NQueenProblem {
final static int N = 8;
void printSolution(int board[][])
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
System.out.print(" "+board[i][j]+" ");
System.out.println();
}
}
void solveNQUtil(int board[][], int col)
{
for (int i = 0; i < N; i++) {
solveNQUtil(board, col + 1);
}
}
public static void main(String[] args) {
NQueenProblem Queen = new NQueenProblem();
int board[][] = new int[N][N];
Queen.solveNQUtil(board, 0);
}
}
我正在研究一个问题,并希望使用递归和for循环生成一个特定的模式,即1000 1100 1110 1111 0100 0110 0111 0010 0011 0001,但是当我编写代码时,它给了我一个...]]] >>
您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。
void solveNQUtil(int board[][], int col)
{
if (col == N)
return;
for (int i = 0; i < N; i++)
{
solveNQUtil(board, col + 1);
}
}
具有一个递归函数,该函数可打印出以许多零和许多列开头的行,并以一个额外的前导零来调用自身。如果前导零的数量等于列的数量,请返回,因为您已经完成:
public class NQueenProblem {
static void solveNQUtil(int leadingZeros, int columns)
{
if (leadingZeros == columns) return;
for (int ones = 1; leadingZeros+ones <= columns ; ones++)
{
int trailingZeros = columns - (leadingZeros + ones);
// print leading zeros
for (int i=0 ; i<leadingZeros ; i++) System.out.print("0");
// print ones
for (int i=0 ; i<ones ; i++) System.out.print("1");
// print trailing zeros
for (int i=0 ; i<trailingZeros ; i++) System.out.print("0");
System.out.println();
}
solveNQUtil(leadingZeros + 1, columns);
}
public static void main(String[] args)
{
int totalColumns = 4;
solveNQUtil(0, totalColumns);
}
}
您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。
具有一个递归函数,该函数可打印出以许多零和许多列开头的行,并以一个额外的前导零来调用自身。如果前导零的数量等于列的数量,请返回,因为您已经完成:
public class NQueenProblem {
static void solveNQUtil(int leadingZeros, int columns)
{
if (leadingZeros == columns) return;
for (int ones = 1; leadingZeros+ones <= columns ; ones++)
{
int trailingZeros = columns - (leadingZeros + ones);
// print leading zeros
for (int i=0 ; i<leadingZeros ; i++) System.out.print("0");
// print ones
for (int i=0 ; i<ones ; i++) System.out.print("1");
// print trailing zeros
for (int i=0 ; i<trailingZeros ; i++) System.out.print("0");
System.out.println();
}
solveNQUtil(leadingZeros + 1, columns);
}
public static void main(String[] args)
{
int totalColumns = 4;
solveNQUtil(0, totalColumns);
}
}