[erledigt] rekursives Programm funzt nicht
-
Huhu,
ich soll zu folgendem Sachverhalt eine rekursive Funktion schreiben:
// falls x = 1: 0
// falls x ungerade: f(x-1)
// ansonsten: f(x/2)+1Mein Prog funzt nicht... fuer n=1 bekomme ich das Ergebnis 0 ausgegeben... aber sobald ich einen anderen Wert nehme, schließt sich das Fenster einfach direkt wieder... seht ihr was ich falsch gemacht habe?
Greez
Haimi
#include <stdio.h> #include <stdlib.h> int func(int n) { if(n == 1) return 0; if ( (n%2) > 0) return func(n - 1); else return func( (n/2) + 1 ); } int main (void) { int n = 0; int ergebnis = 0; printf("Werteingabe: "); scanf("%d", &n); fflush(stdin); ergebnis = func(n); printf("Ergebnis: %d", ergebnis); getchar(); return 0; }
Edit: Ok... so schnell kanns gehen... hab den Fehler gefunden:
Zeile 13 muss lauten:
return ( func(n/2) + 1 );
-
Zusätzlich ist noch gefragt welche mathematische Funktion damit dargestellt wird... ich komme nicht drauf... bei n=7 kommt 2 raus, bei n=8 kommt 3 heraus, bei n=9 auch 3... ich weiß nicht was damit dargestellt werden soll...
-
Haimi schrieb:
Zusätzlich ist noch gefragt welche mathematische Funktion damit dargestellt wird... ich komme nicht drauf... bei n=7 kommt 2 raus, bei n=8 kommt 3 heraus, bei n=9 auch 3... ich weiß nicht was damit dargestellt werden soll...
Stell doch mal eine Wertetabelle auf, so richtig für Eingaben von 0 bis 20, dann wirst Du es sicher erkennen.
-
Schau Dir mal die Funktionswerte für n=2,4,8,16 an. Fällt Dir was auf?
-
ah... ok... die Funktion gibt an, welche Potenz mit der Basis 2 maximal in die angegebene Zahl passt... das Ergebnis ist dann der maximale Exponent...
Viele Dank
-
Haimi schrieb:
ah... ok... die Funktion gibt an, welche Potenz mit der Basis 2 maximal in die angegebene Zahl passt... das Ergebnis ist dann der maximale Exponent...
Viele Dank
Genau.
Das Fachwort dafür heißt
Logarithmus zu Basis 2.