```      //  TAU2.C
//  Calculates a series of tau values
//  Author: Peter Meyer
//  Last mod.: 1999-01-12

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

#define VERBOSE 0

double tau_1(int n);
double tau_2(int n, int m);

/*----------------------------*/
void main(int argc,char *argv[])
{
int n;
double this_tau, last_tau;

printf("\nThis program calculates the series of tau(n), where"
"\ntau(n) = sqrt(1^n + sqrt(2^n + sqrt(3^n + sqrt(4^n + ..,))))\n");

last_tau = 0;

for ( n=0; n<15; n++ )
{
this_tau = tau_1(n);
printf("\ntau(%d)%s = %19.16f",n,(n<10?" ":""),this_tau);
if ( last_tau > 0 )
printf("   diff = %2.6f",this_tau - last_tau);
last_tau = this_tau;
#if VERBOSE
getch();
#endif
}
printf("\n");
}

/*---------------*/
double tau_1(int n)
{
int m=2;
double t0, t1=0;

do    {
t0 = t1;
t1 = tau_2(n,m++);
#if VERBOSE
printf("\n%18.16f",t1);
#endif
} while ( t1 != t0 );

return ( t1 );
}

/*----------------------*/
double tau_2(int n, int m)
{
int i;
double x;

x = sqrt(pow((double)m,(double)n));          //  x = sqrt(m^n)
for ( i=m-1; i>=1; i-- )
x = sqrt(pow((double)i,(double)n) + x);  // x = sqrt(i^n + x)

return ( x );
}
```