function  G = grays(n)
%  G = grays(n)  is a column of  2^n  distinct  n-bit integers
%   that step through consecutive  Gray Codes  running from
%   G(1) = 0  to  G(2^n) = 2^(n-1) = 100...000 (2) ,  but each
%   G(j+1)  is obtained from  G(j)  by changing just one bit of
%   G(j) .  To see which bit,  compute  M = grayndcs(n) ;  then
%        G(j+1) - G(j) = sign(M(j))*2.0.^(abs(M(j)) - 1) .
%  Display  G + 2^52  in  hex  to see its last  n  bits change.
%  Keep  n < 33  because both  grays(n)  and  grayndcs(n)  cost
%   time and memory proportional to  2^n .
%  See also  grayndcs, graynext, int2gray, gray2int, gray2btr,
%  graystep, btr2gray, btr2int and int2btr .
%                              W. Kahan,   1996 to 26 Feb. 2009

n = n(:) ;  T = length(n) ;
if ( (T~=1)|(n~=round(n))|(n<1)|(n>32) ),  N = n ,
  error(' grays(N)  needs a small positive integer  N .'),  end
G = zeros(2^n,1) ;  G(2) = 1 ;  T = 2 ; %... preallocate memory
for  k = 2:n  %...  Recurrence,  NOT  Recursion
    T2 = T+T ;  %... = 2^k
    G(T+1:T2) = T + G(T:-1:1) ;
    T = T2 ;  end

