| 1 | 2 | 3 | 4 | 5 | 
| 16 | 17 | 18 | 19 | 6 | 
| 15 | 24 | 25 | 20 | 7 | 
| 14 | 23 | 22 | 21 | 8 | 
| 13 | 12 | 11 | 10 | 9 | 
If this is what you have been lying wake at night for, here comes an iterative solution using Python/Numpy:
#!/usr/bin/env
python
"""
create a spiral array """
import
numpy
def
spiral(n):
        mat
=
numpy.zeros([n,n])
           dirs
=
[
       
              numpy.array([0,1]), 
 #right
       
              numpy.array([1,0]), 
 #down
       
              numpy.array([0,-1]),
#left
       
              numpy.array([-1,0]),
#up
           ]
           ptr
=
numpy.array([0,-1])
           ptr_prime
=
ptr
           cur_dir_ind
=
 0
           for
i in
range(1,n*n+1):
                      #adjust
direction if necessary
                      while(True):
           
                            ptr_prime =
ptr +
dirs[cur_dir_ind]
                                        if
ptr_prime[0]<0
or
ptr_prime[0]>=n or
ptr_prime[1]<0
\\ 
                               or ptr_prime[1]
>=
n:
               
                                          cur_dir_ind =
(cur_dir_ind +
1)
%
len(dirs)
                                        elif
mat[ptr_prime[0],ptr_prime[1]]
>
0.0:
               
                                          cur_dir_ind =
(cur_dir_ind +
1)
%
len(dirs)
                                        else:
               
                                   break
                      #update
ptr;
                      ptr
=
ptr_prime
       
              mat[ptr[0],ptr[1]]
=
i
       return
mat