PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rekursiv, aber wie???



nul
20-09-2002, 18:46
ich lerne gerade C, hab aber bei volgender aufgabe ein problem:

Schreiben Sie eine rekursive Funktion, die den Wert 3 um eine anzugebende Zahl potenziert. Wenn zum Bsp. 4 übergeben wird, gibt die Funktion den Wert zurück.

bis noch bin ich soweit:

#include <stdio.h>

int a, y, z;

int potenzieren(int a);

int main()
{
printf("Geben sie eine Zahl ein, mit der die 3 potenziert werden soll: \n");
scanf("%d", &a);

z = potenzieren(a);

printf("\n%d\n", z);

return 0;
}

int potenzieren(int a)
{
y *= potenzieren(a) * 3;

return y;
}

das, wie ein erfahrener Programmiere gleich sieht, funktioniert aber nicht.

pleas help!!!

P.S.: Ok, die funktion y *= potenzieren(a) * 3 ist fölliger quatsch, aber das ist auch nur einer von ca. 20 versuchen, da hatte ich keine ideen mehr.

Lin728
20-09-2002, 19:13
Servus!

Naja, so nach "erfahrenen Programmiere" sieht das zwar nicht aus...
Variablen nie (ganz selten) global definieren, sondern besser übergeben.
Also x,y,z erst in main definieren und dann übergeben, ist besser....



Nun, mir ist zwar nicht ganz genau klar, was du brauchst, aber eine exponentionlfunktio hätt ich da schon:

1. #include <math.h>

double pow(double x, double y);

Entspricht x hoch y

Wars das was du suchst?

brotzi
21-09-2002, 00:51
simple lösung:

int potenzieren(int potenz)
{
if (potenz > 1){ /*bedingung für abbruch der rekursion*/
return potenzieren(potenz-1) * 3;
else
if (potenz == 1)
return 3;
else
if (potenz == 0)
return 1;

return 0; /*fehler!!*/
}

Diesen Code kannst Du direkt in Dein Prog einbauen - ohne weitere Anpassungen.
Sollte gehen (habs nicht getestet)

anda_skoa
21-09-2002, 11:21
Original geschrieben von brotzi

if (potenz > 1){ /*bedingung für abbruch der rekursion*/
return potenzieren(potenz-1) * 3;


Nur so als kleiner Tipp am Rande :)

Wenn man statt
return potenzieren(potenz-1) * 3
schreibt:
return 3* portenzieren(potenz-1);

Dann ist das eine tail-rekursive Funktion, d.h. ein guter Compiler kann das möglicherweise in eine Schelife optimieren.

Ciao,
_

nul
22-09-2002, 14:11
Danke für die Hilfe, ich habs jetzt!