• Source
    1. /* Se mostrara una matriz recorrida en forma de espiral, de manera recursiva NxM N Filas y M columnas */
    2.  
    3. import java.util.*;
    4. import java.lang.*;
    5. import java.io.*;
    6.  
    7.  
    8. class Ideone
    9. {
    10. static public void espiral(int [][] matriz,int inicio, int filas, int columnas){
    11. /*CASO BASE*/
    12. /*Caso Final Recursión*/
    13. if(inicio > filas || inicio > columnas){
    14. System.exit(0);
    15. }
    16. /*Caso solo queda una fila o columna*/
    17. if(inicio == filas-1){
    18. for(int k = inicio ;k <= columnas-1; k++){
    19. System.out.print(matriz[inicio][k]);
    20. }
    21. System.exit(0);
    22. }
    23. if(inicio == columnas-1){
    24. for(int k = inicio ;k <= filas-1; k++){
    25. System.out.print(matriz[k][inicio]);
    26. }
    27. System.exit(0);
    28. }
    29.  
    30.  
    31. /*CASO GENERAL Imprimira el borde de la matriz*/
    32. for(int i = inicio ; i < columnas ; i ++){
    33. System.out.print(matriz[inicio][i]); /*Imprimir parte superior*/
    34. }
    35. for(int j = inicio + 1 ; j < filas ; j++){
    36. System.out.print(matriz[j][columnas - 1]); /*Imprimir parte derecha*/
    37. }
    38. for(int j = columnas - 1 ; j > inicio; j--){
    39. System.out.print(matriz[filas - 1][j - 1]); /*Imprimir parte inferior*/
    40. }
    41. for(int i = filas - 1; i > 0 + 1; i--){
    42. System.out.print(matriz[i - 1][inicio]); /*Imprimir parte Izquierda*/
    43. }
    44. espiral(matriz,inicio + 1,filas -1 ,columnas -1);
    45.  
    46.  
    47.  
    48. }
    49.  
    50. public static void main (String[] args) throws java.lang.Exception
    51. {
    52.  
    53. int N = 3;
    54. int M = 3;
    55. int [][] matriz = new int[N][M];
    56.  
    57. for(int i = 0; i < N*M ;i++){
    58. /*Llenar matriz 1 ciclo*/
    59. matriz[i/M][(i-(i/M)*M) ] = i;
    60. }
    61.  
    62.  
    63. espiral(matriz,0,N,M);
    64.  
    65.  
    66.  
    67. }
    68. }