C :: Aufgabe #122 :: Lösung #1

1 Lösung Lösung öffentlich
#122

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
#1
vote_ok
von devnull (8870 Punkte) - 10.04.2017 um 17:58 Uhr
Quellcode ausblenden C-Code
/*******************************
 * 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;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2104338

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.