[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)+1

    Mein 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.


Anmelden zum Antworten