C :: Aufgabe #122
1 Lösung
Leibnitz-Reihe rekursiv, endrekursiv und iterativ für die Annäherung von Pi
Anfänger - C
von ah3n0bar6us
- 16.07.2016 um 19:40 Uhr
Schreibe drei Programme zur Annäherung an die Zahl Pi mit Hilfe der Leibnitz Formel rekursiv, endrekursiv und iterativ für die Eingabe einer positiven natürlichen Zahl.
Wikipedie, Leibnitz-Reihe
Wikipedie, Leibnitz-Reihe
Lösungen:
/*******************************
* lr.c Leibniz-Reihe
*******************************/
#include <stdio.h>
double LR_iter(int max) {
double sum = 1.0;
double val;
int sign = -1;
int k;
for (k=1; k<=max; k++) {
val = 1.0/(2*k+1)*sign;
printf("iterativ Index %2d: %18.15f\n", k, val);
sum += val;
sign = -sign;
}
return sum;
}
double LR_recur(int index) {
double sum, val;
int sign;
if (index > 0) {
sign = (index%2)?-1:1;
val = 1.0/(2*index+1)*sign;
sum = LR_recur(index-1);
printf("rekursiv Index %2d: %18.15f\n", index, val);
return sum + val;
}
else {
printf("rekursiv Index 0: 1.0\n");
return 1.0;
}
}
double LR_endrecur(double *sum, int index) {
double val;
int sign;
if (index == 0) {
printf("endrekursiv Index 0: 1.0\n");
*sum += 1.0;
return *sum;
}
else {
sign = (index%2)?-1:1;
val = 1.0/(2*index+1)*sign;
*sum += val;
printf("endrekursiv Index %2d: %18.15f\n", index, val);
return LR_endrecur(sum, index-1);
}
}
int main() {
double sum;
int max;
printf("Endindex: ");
scanf( "%d", &max );
printf("Pi-Näherung iterativ : %.15f\n\n", 4.0*LR_iter(max));
printf("Pi-Näherung rekursiv : %.15f\n\n", 4.0*LR_recur(max));
printf("Pi-Näherung endrekursiv : %.15f\n", 4.0*LR_endrecur(&sum, max));
return 0;
}
