public static void main(String[] args) { char[][] chars = { {'1','2','3','4'}, {'5','6','7','8'}, {'9','0','a','b'}, {'c','d','e','f'}}; int columnNum = chars[0].length; int rowNum = chars.length; printCharArray(rowNum, columnNum, chars); } private static void printCharArray(int rowNum, int columnNum, char[][] chars) { //print the first row of given array for (int i = 0; i < columnNum; i++) { System.out.print(chars[0][i]); } //swap rows with columns of sub-array if (rowNum > 0 && columnNum > 0) { int newRowNum = columnNum; int newColumnNum = rowNum - 1; char[][] newChars = new char[newRowNum][newColumnNum]; for (int i = 0; i < newRowNum; i++) { for (int j = 0; j < newColumnNum; j++) { newChars[i][j] = chars[j + 1][newRowNum - i - 1]; } } //print the sub-array recursively printCharArray(newRowNum, newColumnNum, newChars); } }