Pages

[C++] Verstehe diese Rekursion nicht Thema

Friday, August 2, 2013


Hallo,

hier ist ein Rekursionsbeispiel (siehe ganz unten bei der "GetPower"-Funktion), welches mithilfe einer Rekursion eine Zahl potenzieren soll. Man bestimmt, wie man auch erkennt, die Zahl/Basis (number) und die Potenz (power) selber. In der Funktion werden dann diese 2 Werte übernommen. Ich habe den Code mal aufgeschrieben und die stelle kommentiert, die ich nicht verstehe (letzte Codezeile). Im Beispiel nehme ich jetzt mal die Basis 2 und die Potenz 4, das Ergebnis soll also 16 entsprechen (2^4=16):


Code:


#include <iostream>
#include <conio.h>

typedef unsigned short USHORT;
typedef unsigned long ULONG;

ULONG GetPower(USHORT n, USHORT power);

int main()
{
USHORT number, power;
ULONG answer;

cout << "Geben Sie eine Zahl ein: "; cin >> number; //gebe 2 ein
cout << "Zu welcher Potenz? "; cin >> power; //gebe 4 ein

answer = GetPower(number,power);

cout << number << " hoch " << power << "ist gleich " << answer << endl;

getch();
return 0;
}

ULONG GetPower(USHORT n, USHORT power)
{
if(power == 1)
{return n;}
else
{return (n * GetPower(n,power-1));} //hier meine Frage - Frage steht unter dem Code
}


n ist ja = 2. Da steht if power == 1, aber power ist ja noch nicht 1, sondern 4, also wird der else-Rumpf ausgeführt. Im else-Rumpf steht, dass n (also 2) mit GetPower(n,power-1)) multipliziert wird. Ich verstehe nicht, warum gerade mit GetPower, also mit der Funktion? 2 soll sich mit sich selber, also auch mit 2 multiplizieren. Aber inwiefern soll die Funktion GetPower eine 2 darstellen? Das (n,power-1)) ist mir ja klar. Die Funktion wird so oft ausgeführt, bis power 1 ist, denn dann wird nur noch die neue Basis (n) ausgegeben. Und um power auf 1 zu bekommen, wird es bei jedem Funktionsdurchgang um 1 dekrementiert. Aber n * GetPower, also n*Funktion kann doch nicht 4 ergeben und beim nächsten Durchgang dann 8 und dann 16. Ich bitte um eine Erklärung.

*Quelle des Scripts: C++ in 21 Tagen, Buch von Jesse Liberty

Vielen Dank im Voraus


No comments:

Post a Comment

 

Tags

Sidebar One