public static void Main()
Console.WriteLine(traverse(new [] {1, 2, 3, 4, 5,
static int getIndex(int x, int y, int colums)
static String traverse(int[] matrix, int rows, int columns)
String output = traverseRecursive(matrix, columns, 0, rows-1, 0, columns-1);
return output.Substring(0, output.Length - 2);
static String traverseRecursive(int[] matrix, int columns, int rowStart, int rowLength, int colStart, int colLength)
for (int i = rowStart; i <= colLength; i++)
output += matrix[getIndex(rowStart, i, columns)] + ", ";
for (int i = rowStart+1; i <= rowLength; i++)
output += matrix[getIndex(i, colLength, columns)] + ", ";
if (rowStart+1 <= rowLength)
for(int i = colLength-1; i >= colStart; i--)
output += matrix[getIndex(rowLength, i, columns)] + ", ";
if (colStart+1 <= colLength)
for(int i = rowLength-1; i >= rowStart; i--)
output += matrix[getIndex(i, colStart, columns)] + ", ";
if(rowStart+1 <= rowLength-1 && colStart+1 <= colLength-1)
output += traverseRecursive(matrix, columns, rowStart+1, rowLength-1, colStart+1, colLength-1);