#include <math.h>
#include <stdio.h>

double pnorm_i(int n, double *a, double p) {
  return (n < 0) ? 0.0 : pow(fabs(a[n]), p) + pnorm_i(n - 1, a, p);
}
double pnorm(double p, int n, double *a) {
  return pow(pnorm_i(n - 1, a, p), 1.0 / p);
}

int main() {
  double a[] = { 0.5, -0.5 };
  double b[] = { 1.0, 1.0, 1.0, 1.0, 1.0 };
  double c[] = { -1.0, 2.0, 0.0, 3.0 };
  printf("%f\n", pnorm(1.0, sizeof(a) / sizeof(double), a));
  printf("%f\n", pnorm(1.0, sizeof(b) / sizeof(double), b));
  printf("%f\n", pnorm(1.0, sizeof(c) / sizeof(double), c));
  putchar('\n');
  printf("%f\n", pnorm(2.0, sizeof(a) / sizeof(double), a));
  printf("%f\n", pnorm(2.0, sizeof(b) / sizeof(double), b));
  printf("%f\n", pnorm(2.0, sizeof(c) / sizeof(double), c));
  putchar('\n');
  printf("%f\n", pnorm(3.0, sizeof(a) / sizeof(double), a));
  printf("%f\n", pnorm(3.0, sizeof(b) / sizeof(double), b));
  printf("%f\n", pnorm(3.0, sizeof(c) / sizeof(double), c));
  putchar('\n');
  return 0;
}
/* end */
