Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
09.02.2002, 22:30
Gruwekarl



Hi!

Ich bin zur Zeit am erlernen von C++!

Hab jetzt das Thema Funktionen:Rekursion.
Ich soll da jetzt ein Prog als Aufgabe schreiben, das einen auffordert eine Basis und einen Exponenten einzugeben und das Ergebnis dann nicht mit pow oder so löst, sondern ich soll die Aufgabe mit ner Rekursion schreiben und die Funktion "fib" benutzen.

Aber irgendwie schnall ich das mit fib nicht!

Kann mir das mal jemand kurz erklären?

Thx im Vorraus

--

zum Seitenanfang zum Seitenende Profil || Suche
001
09.02.2002, 23:47
anothergb02



ich auch nicht :P kannst ja pow selber proggen und die Funk dann fib nennen, dann kannst du stolz sagen:"Ich habe fib benutzt".

--

Being in john Malkovich
.....


Dieser Beitrag wurde am 09.02.2002 um 23:58 von anothergb02 bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
09.02.2002, 23:57
Gruwekarl



Jo, könnt ich eigentlich machen.

Aber dadurch lern ichs ja net!

--

zum Seitenanfang zum Seitenende Profil || Suche
003
10.02.2002, 02:07
Kriz



fib? Fibonacci-Reihen?

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
004
10.02.2002, 02:58
Gruwekarl



Jo, so hab ich das in dem Buch erklärt bekommen.

An ner Fibonacci-Reihe. Dort war der Code für ein Prog abgebildet, das nach ner Stelle der Fibonacci-Reihe fragt, und das dann berechnet, welchen Wert z.Bsp. die 12te Zahl der Reihe hat.
Hab ich zwar net kapiert, aber anders ab ichs auch net erklärt bekommen.

Jetzt soll ich nen Prog machen.

Das ist die Aufgabenstellung aus dem buch:

Zitat:

Schreiben Sie ein Programm, das um die Eingabe einer Zahl und einer Potenz bittet. Schreiben Sie eine rekursive Funktion, um die Zahl zu potenzieren. Lautet beispielsweise die Zahl 2 und die Potenz 4, sollte die Funktion 16 zurückliefern.

Es ist mir klar, das ich die Zahl n mit sich selbst multiplizieren muss, und das Ergebnis nochmal mit der Zahl mutliplizieren muss. Das muss ich dann so oft machen, wie es die Potenz angibt.

Bis dahin kein Prob, aber ich hab keinen Schimmer, wie ich das machen muss.

Ich denke, das ich die Funktion fib so aufrufen muss : fib (p) , wobei p die Potenz ist. Aber ich versteh net so ganz, was fib überhaupt macht. Da liegt das Prob!

--


Dieser Beitrag wurde am 10.02.2002 um 03:01 von Gruwekarl bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
10.02.2002, 07:36
Tron



ich les da jetzt nix von fib, fib war ja nur der funktionsname des beispiels.
nenn deine rekursive funktion doch am besten "pot" oder "potenzieren".
diese braucht dann natuerlich nicht einen parameter (wie die fibonacci-funktion) sondern 2, naemlich die basis und den exponenten.

eine rekursive funktion ist eine funktion die ein gegebenes problem zum teil loest, dadurch vereinfacht und das vereinfachte problem wieder an sich selbst uebergibt. wichtig dabei ist, dass es ein einfachstes problem gibt, das direkt (ohne weitere rekursion) geloest werden kann und die rekursion darauf hinarbeitet (wenn nicht, wuerde die rekursion endlos weiterlaufen und mit einem stack overflow abstuerzen)
(ja ich weiss, dass das nur eine sehr eingeschraenkte beschreibung von rekursiven algorithmen ist, aber die reicht hier voellig)

im falle fibonacci ist die problemvereinfachung: fib(x) == fib(x - 1) + fib(x - 2)
und die einfachsten faelle: fib(1) == 1 und fib(2) == 1

um dir noch einen 2 letzte tipps zu geben (ohne gleich die gesamte funktion hinzuschreiben):
x 'hoch' y == x * (x 'hoch' (y - 1))
und
x 'hoch' 0 == 1

ich weiss, dass rekursive algorithmen nur mit aeusserster gewalt in die kleinen grauen dinger zwischen den ohren reingehen, aber bruete drueber und versuch dich an der aufgabe, dann wird's, denke ich, klarer.
ich hoffe das hilft dir weiter.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
006
10.02.2002, 15:06
Gruwekarl



Hmmm, jo thx!

Das hilft mir jetzt erstmal weiter.

Aber ich glaub ich werd jetzt erst noch ein paar Übungen machen, mit den Befehlen die ich schon kenne, un probiers dann später wieder mit Rekursion.
Ich hoffe das ich das dann gepeilt bekomme. :O)

--

zum Seitenanfang zum Seitenende Profil || Suche
007
10.02.2002, 18:44
Gruwekarl



So, ich hab das glaub ich jetzt verstanden und das Prog funzt auch.

Kann mir vielleicht jemand sagen, ob ich das richtig gemacht hab oder ob ich was sehr umständlich gemacht hab?

Hier is der Code:

Zitat:

#include <iostream.h>
#include <stdio.h>

unsigned int Potenzieren(unsigned int, unsigned int);

int main()
{
unsigned int Basis, Exponent, Ergebnis;
cout << "Gib die Basis ein: ";
cin >> Basis;
cout << "\nGib den Exponenten ein: ";
cin >> Exponent;
Ergebnis = Potenzieren(Basis, Exponent);
cout << "\n\nDas Ergebnis ist: " << Ergebnis << endl;
getchar ();
return 0;
}

unsigned int Potenzieren(unsigned int Basis, unsigned int Exponent)
{
if (Exponent == 1)
return Basis;
else
return (Basis*Potenzieren(Basis, Exponent-1));
};

Thx im Vorraus

--

zum Seitenanfang zum Seitenende Profil || Suche
008
10.02.2002, 19:24
apfelkorn



nein, das sieht gut aus... rekursiv is very easy :)
Die Funktion kann man übrigens auch ganz wunderbar mit Templates machen...

--


Dieser Beitrag wurde am 10.02.2002 um 19:25 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
11.02.2002, 13:44
Prefect



... und noch besser mit ner simplen Schleife - in dem Fall ist Rekursion ja sinnlos. Der Compiler wird die Rekursion übrigens sowieso wegoptimieren, da es sich um Tail-Recursion handelt.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
010
11.02.2002, 14:04
Nicemice
Moderator


Maannn, Prefect, der Weg ist das Ziel... hier gings doch darum eine rekursive Funktion zu schreiben.

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
011
11.02.2002, 17:41
TheTinySteini



Nen Schönheitsfehler gibt's noch, denn die Funktion wird bei Potenzieren( x, 0 ) irgendwas seltsames ausgeben, jedenfalls nicht 1. Irgendeine Zahl hoch 0 ist aber immer 1.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche