private void fit(char matrix[][], Position topLeft,
            int size, Position missingPosition){
        if(size == 2){
            updateMatrix(matrix, topLeft, missingPosition);
            return;
        }
        Position alreadyFilledQuadrantPosition = determineQuadrant(topLeft, size, missingPosition);
        updateMatrix(matrix, new Position(topLeft.x + size/2-1, topLeft.y + size/2-1), alreadyFilledQuadrantPosition);
        for(int i=0 ; i < 2; i++){
            for(int j=0; j < 2; j++){
                Position newMissingPosition = new Position(topLeft.x + size/2 -1+i, topLeft.y + size/2 -1 + j);
                if(newMissingPosition.equals(alreadyFilledQuadrantPosition)){
                    fit(matrix, new Position(topLeft.x + i*size/2, topLeft.y + j*size/2) , size/2, missingPosition);
                }else{
                    fit(matrix, new Position(topLeft.x + i*size/2, topLeft.y + j*size/2) , size/2, newMissingPosition);
                }
            }
        }
    }
http://www.geeksforgeeks.org/divide-and-conquer-set-6-tiling-problem/
Test cases
Size of matrix is at least 2 and power of 2 always
Missing point could be on edges
Missing point could be in any of 4 quadrants
src/com/interview/multiarray/TilingProblem.java