我试图解决以下问题:生成的特殊矩阵“
给定一个数n,产生大小为2的矩阵^ N * 2^n的尊重以下规则:
n = 1
[ 1 2 ]
[ 3 4 ]
n = 2
[ 1 2 5 6 ]
[ 3 4 7 8 ]
[ 9 10 13 14 ]
[ 11 12 15 16 ]
这里是我的算法:
static void generare(int i , int j , int x , int y){
if(x - i == 1 && y - j == 1)
{
mat[i][j] = counter++;
mat[i][j+1] = counter++;
mat[i+1][j] = counter++;
mat[i+1][j+1] = counter++;
}
else{
generare(i,j,x/2,y/2);
generare(i,y/2+1,x/2,y);
generare(x/2+1,j,x,y/2);
generare(x/2+1,y/2+1,x,y);
}
}
它的工作原理对于n = 1,2,但是当我尝试任何数量> 2,它崩溃。我怎样才能修复我的递归函数?
1.什么是“垫子”? 2.它与什么错误/异常崩溃? – UnholySheep
mat是我矩阵的名字。我得到的错误是“java.lang.StackOverflowError”。我的递归函数在一个无限循环中结束,但我不知道应该添加什么条件,所以我的函数仍然会按照我希望的方式执行。 – ivanciprian
“mat”是如何定义的?同样在这些计算中检查相等性通常是一个坏主意,相反,您应该(可能)使用'<='。你的代码也不包含一个'n'变量,那么你怎么调用它呢? (我假设你为每个参数传递相同的数字?) – UnholySheep