を生成は、私は次のような問題を解決しようとしています「特別な行列」
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