Zum Inhalt springen

Probleme mit rekursiven Funktionen


DolStudent

Empfohlene Beiträge

Hallo Mitstudenten,

das Prinzip der rekursive Funktion habe ich verstanden. Jedoch möchte ich die Problem lösen. Daher benötige ich eure Hilfe:

Mathematik:

An = n2 / 2

Zur Veranschaulichung zeige ich euch:

(An) = 1/2 + 4/2 + 9/2 + 14/2 + .... + (n-2)2/2 + (n-1)2/2 + n2/2

(An-1) = 1/2 + 4/2 + 9/2 + 14/2 + .... + (n-2)2/2 + (n-1)2

Folgend:

An = An-1 + n2/2 für n>1, weil n ist Element von natürliche Zahl, daher ist A0 nicht definiert.

An = 1/2 für n=1

Also habe ich eine Algorithmus entworfen, siehe unten.

Algorithmus:

#include

float bruch_n(int);

float potenz2(float);

void main()

{

int a;

printf("An = n^2/2\n");

printf("N: ");

scanf("%i", &a);

printf("%f \n", bruch_n(a));

}

float bruch_n(int n)

{

if (n==1)

return (1/2);

else

return bruch_n(n-1)+potenz2(n)/2;

}

float potenz2(float n)

{

return n*n;

}

--------------------------------------------

Eingabe: n=5

Ausgabe: 27.0000000

--------------------------------------------

Müsste 27.500000 sein!!

--------------------------------------------

Eingabe: n=4

Ausgabe: 24.5000000

--------------------------------------------

Müsste 25.0000000 sein!!

Irgendwo stimmt das Ergebnis nicht.

Lösung:

Ich könnte 0.5 am Schluß als Notlösung dazuaddieren.

Aber habe ich in der rekursive Funktion was falsches gemacht?

Ich könnte Iteration auch wählen, aber zum verstehen möchte ich Rekursion anwenden.

Vielen Dank für eure Hilfe!

PS: Das habe ich auch im Online Campus der WBH gepostet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Anzeige: (wird für registrierte Benutzer ausgeblendet)

Hallo DolStudent,

das Problem liegt in der Art und Weise wie du n == 1 behandelst. 1/2 ist eine Integer Division, weil beide Zahlen vom Typ Integer sind. Und 1/2 als Integerdivision ergibt 0. Daher fehlt dir immer 0,5.

Gib einfach den Wert 0.5 zurück und du bekommst das richtige Ergebnis.

Ein Tipp noch, zum Potenzieren kannst du die Funktion pow benutzen, ist in der math.h definiert.

Dein Code mit pow:

#include

#include

float bruch_n(int);

void main()

{

int a;

printf("An = n^2/2\n");

printf("N: ");

scanf("%i", &a);

printf("%f \n", bruch_n(a));

}

float bruch_n(int n)

{

if (n==1)

return 0.5;

else

return bruch_n(n-1)+pow(n,2)/2;

}

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.




×
  • Neu erstellen...