function [ n_data, x, fx ] = gamma_values ( n_data )

%*****************************************************************************80
%
%% GAMMA_VALUES returns some values of the Gamma function.
%
%  Discussion:
%
%    The Gamma function is defined as:
%
%      Gamma(Z) = Integral ( 0 <= T < Infinity) T**(Z-1) exp(-T) dT
%
%    It satisfies the recursion:
%
%      Gamma(X+1) = X * Gamma(X)
%
%    Gamma is undefined for nonpositive integral X.
%    Gamma(0.5) = sqrt(PI)
%    For N a positive integer, Gamma(N+1) = N!, the standard factorial.
%
%    In Mathematica, the function can be evaluated by:
%
%      Gamma[x]
%
%  Licensing:
%
%    This code is distributed under the GNU LGPL license.
%
%  Modified:
%
%    20 May 2007
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Milton Abramowitz, Irene Stegun,
%    Handbook of Mathematical Functions,
%    US Department of Commerce, 1964.
%
%    Stephen Wolfram,
%    The Mathematica Book,
%    Fourth Edition,
%    Wolfram Media / Cambridge University Press, 1999.
%
%  Parameters:
%
%    Input/output, integer N_DATA.  The user sets N_DATA to 0 before the
%    first call.  On each call, the routine increments N_DATA by 1, and
%    returns the corresponding data; when there is no more data, the
%    output value of N_DATA will be 0 again.
%
%    Output, real X, the argument of the function.
%
%    Output, real FX, the value of the function.
%
  n_max = 25;

  fx_vec = [ ...
     -0.3544907701811032E+01, ...
     -0.1005871979644108E+03, ...
      0.9943258511915060E+02, ...
      0.9513507698668732E+01, ...
      0.4590843711998803E+01, ...
      0.2218159543757688E+01, ...
      0.1772453850905516E+01, ...
      0.1489192248812817E+01, ...
      0.1164229713725303E+01, ...
      0.1000000000000000E+01, ...
      0.9513507698668732E+00, ...
      0.9181687423997606E+00, ...
      0.8974706963062772E+00, ...
      0.8872638175030753E+00, ...
      0.8862269254527580E+00, ...
      0.8935153492876903E+00, ...
      0.9086387328532904E+00, ...
      0.9313837709802427E+00, ...
      0.9617658319073874E+00, ...
      0.1000000000000000E+01, ...
      0.2000000000000000E+01, ...
      0.6000000000000000E+01, ...
      0.3628800000000000E+06, ...
      0.1216451004088320E+18, ...
      0.8841761993739702E+31 ];

  x_vec = [ ...
     -0.50E+00, ...
     -0.01E+00, ...
      0.01E+00, ...
      0.10E+00, ...
      0.20E+00, ...
      0.40E+00, ...
      0.50E+00, ...
      0.60E+00, ...
      0.80E+00, ...
      1.00E+00, ...
      1.10E+00, ...
      1.20E+00, ...
      1.30E+00, ...
      1.40E+00, ...
      1.50E+00, ...
      1.60E+00, ...
      1.70E+00, ...
      1.80E+00, ...
      1.90E+00, ...
      2.00E+00, ...
      3.00E+00, ...
      4.00E+00, ...
     10.00E+00, ...
     20.00E+00, ...
     30.00E+00 ]; 

  if ( n_data < 0 )
    n_data = 0;
  end

  n_data = n_data + 1;

  if ( n_max < n_data )
    n_data = 0;
    x = 0.0;
    fx = 0.0;
  else
    x = x_vec(n_data);
    fx = fx_vec(n_data);
  end

  return
end
