C++ programm das mit Funktionen rechnet?

...komplette Frage anzeigen

3 Antworten

Die Rede ist doch von "natürlichen Zahlen", also ist int schon mal nicht korrekt. Nimm unsigned stattdessen. Und dein Compiler meckert, weil die Prototypen fehlen:

// Erstmal die Prototypen:
unsigned f(unsigned);
unsigned g(unsigned);
unsigned h(unsigned);

// Dann die Implementierung:
unsigned f(unsigned n) {
return n ? h(n) + g(n - 1) : 0;
}

unsigned g(unsigned n) {
return n ? 2 * f(n) : 0;
}

unsigned h(unsigned n) {
return n ? n * h(n - 1) : 1;
}

// Kleiner Test:
int main(void) {
using namespace std;

for (unsigned i = 0; i < 10; ++i) {
cout << "f(" << i << "): " << f(i) << endl;
cout << "g(" << i << "): " << g(i) << endl;
cout << "h(" << i << "): " << h(i) << endl;
cout << endl;
}
}

Damit erhältst du folgende Ausgabe:

f(0): 0                                                                                  
g(0): 0
h(0): 1

f(1): 1
g(1): 2
h(1): 1

f(2): 4
g(2): 8
h(2): 2

f(3): 14
g(3): 28
h(3): 6

f(4): 52
g(4): 104
h(4): 24

f(5): 224
g(5): 448
h(5): 120

f(6): 1168
g(6): 2336
h(6): 720

f(7): 7376
g(7): 14752
h(7): 5040

f(8): 55072
g(8): 110144
h(8): 40320

f(9): 473024
g(9): 946048
h(9): 362880

Soweit alles klar? Falls nicht, suche bei Google mal nach "Elvis-Operator" ... das ist der einzige Punkt bei der Aufgabe, bei dem ein Anfänger Probleme haben könnte, denke ich mir. :)

Schönen Abend noch! :)

PS: Verzeih mir bitte die grauenhafte Codeformatierung, aber der WYSIWYG-Editor hier auf GF ist leider total verbuggt! ><

int f(int n) { if (n==0) return 0; else return h(n) + g(n - 1); }

so einfach:

du darfst nicht die funktion auf die linke seite der anweisung schreiben, also

a = f(n)  ist ok

aber   f(n) = a    ist nicht ok, links mit f(n) angefangen heisst du machst eine funktionsdefinition mit default rückgabewert und default parameterwert ... ich denke ist jedesmal int.

Was möchtest Du wissen?