为什么会死循环啊??

为什么会死循环啊

img

#include
#include
using namespace std;

int n;
const int maxn = 1050;
int arr[maxn][maxn];

void fun( int x1, int y1, int x2, int y2)
{
    if (x2-x1==1&&y2-y1==1)
    {
        arr[x1][y1] = 0;
        return;
    }
    for (int i = 1; i <= x2 >> 1; i++)
        for (int j = 1; j <= y2 >> 1; j++)
            arr[i][j] = 0;
    fun( x1, (y2 >> 1) + 1, (x2 >> 1), y2);
    fun( (x2 >> 1) + 1, y1, x2, y2 >> 1);
    fun( (x2 >> 1) + 1, (y2 >> 1) + 1, x2, y2);

}

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= pow(2, n); i++)
        for (int j = 1; j <= pow(2, n); j++)
            arr[i][j] = 1;

    fun(1, 1, pow(2, n), pow(2, n));
    for (int i = 1; i <= pow(2, n); i++)
    {
        for (int j = 1; j <= pow(2, n); j++)
            printf("%d ", arr[i][j]);
        printf("\n");
    }
}