//  Data Structures with Java by John R. Hubbard
//  Copyright McGraw-Hill, 2001
//  Problem 4.37 on page 93

public class Pr0437
{ public static void main(String[] args)
  { // p(x) = 2 + 4x + 6x^2 + 8x^3:
    double[] a = { 2.0, 4.0, 6.0, 8.0 };
    // so p(0) = 2:
    System.out.println("p(a,0.0) = " + p(a,0.0));
    // and p(1) = 20:
    System.out.println("p(a,1.0) = " + p(a,1.0));
    // and p(3) = 284:
    System.out.println("p(a,3.0) = " + p(a,3.0));
    // and p(-3) = -172:
    System.out.println("p(a,-3.0) = " + p(a,-3.0));
  }
  
  public static double p(double[] a, double x)
  { // returns a[0] + a[1]*x + a[2]*x*x + ...
    return p(a,x,0);
  }
  
  private static double p(double[] a, double x, int k)
  { // returns a[k] + a[k+1]*x + a[k+2]*x*x + ...
    if (k == a.length) return 0;  // basis
    return a[k] + x*p(a,x,k+1);   // recursion
  }
}
