/* Se mostrara una matriz recorrida en forma de espiral, de manera recursiva NxM N Filas y M columnas */
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
static public void espiral(int [][] matriz,int inicio, int filas, int columnas){
/*CASO BASE*/
/*Caso Final Recursión*/
if(inicio > filas || inicio > columnas){
}
/*Caso solo queda una fila o columna*/
if(inicio == filas-1){
for(int k = inicio ;k <= columnas-1; k++){
System.
out.
print(matriz
[inicio
][k
]); }
}
if(inicio == columnas-1){
for(int k = inicio ;k <= filas-1; k++){
System.
out.
print(matriz
[k
][inicio
]); }
}
/*CASO GENERAL Imprimira el borde de la matriz*/
for(int i = inicio ; i < columnas ; i ++){
System.
out.
print(matriz
[inicio
][i
]); /*Imprimir parte superior*/ }
for(int j = inicio + 1 ; j < filas ; j++){
System.
out.
print(matriz
[j
][columnas
- 1]); /*Imprimir parte derecha*/ }
for(int j = columnas - 1 ; j > inicio; j--){
System.
out.
print(matriz
[filas
- 1][j
- 1]); /*Imprimir parte inferior*/ }
for(int i = filas - 1; i > 0 + 1; i--){
System.
out.
print(matriz
[i
- 1][inicio
]); /*Imprimir parte Izquierda*/ }
espiral(matriz,inicio + 1,filas -1 ,columnas -1);
}
{
int N = 3;
int M = 3;
int [][] matriz = new int[N][M];
for(int i = 0; i < N*M ;i++){
/*Llenar matriz 1 ciclo*/
matriz[i/M][(i-(i/M)*M) ] = i;
}
espiral(matriz,0,N,M);
}
}