for-Schleife rekursiv schreiben



  • Hallo!
    Ich bin absoluter C-Neuling und bräuchte etwas Hilfe.

    Diese Funktion würde ich gerne rekursiv schreiben:

    for (t=0; t<=p; t++) {
            k= k + 6 * pow(5,t);
       }
    

    Kann mir jemand weiterhelfen?



  • Das ist keine Funktion. Mache eine Funktion daraus, überlege dir die obligatorische Abbruchbedingung und die Funktionsparameter und teste es aus, sinnigerweise mit einem Debugger und nicht mit einem Komplettdurchlauf.



  • So ich hab das jetzt mal versucht aber es will nicht.

    int pot (int x) {
    
        int n,i;
        x=0;
        for (i=0; i<=n; i++)
        {
            x= x + 4 * pow(10,i);}
    
        return x;    
    
    }
    

    Ich habs erstmal iterativ versucht aber jetzt kommt da nur noch was falsches raus.
    Was sollte ich anderen machen?


  • Mod

    Wie sollen wir wissen, was du ausrechnen willst? Du hast nach einer rekursiven Umsetzung einer Funktion gefragt. Da könnten wir nun helfen, aber du sagst, es wäre die falsche Funktion. Damit können wir dir nicht helfen.

    P.S.: Deine Funktion enthält zudem noch offensichtliche Fehler wie uninitialisierte Werte (n) und unbenutzte Werte (x). Das ist klar, dass das nicht funktioniert.



  • greenhorn9012 schrieb:

    Diese Funktion würde ich gerne rekursiv schreiben:

    for (t=0; t<=p; t++) {
            k= k + 6 * pow(5,t);
       }
    

    Du willst Deinem Lehrer imponieren? Hier bitte:

    #include <stdio.h>
    #include <math.h>
    
    int pow_rekursiv (int result, int base, int exp)
    {
        return (exp) ? pow_rekursiv ((exp&1)?result*base:result, base*base, exp>>1) : result;
    }
    
    int for_rekursiv (int k, int t, int p)
    {
        return (t <= p) ? for_rekursiv(k + 6 * pow_rekursiv(1,5,t), t+1, p) : k;
    }
    
    int main( void )
    {
        int p = 7;
        int K = 3;
        int t, k;
    
        k = K;
        for (t=0; t<=p; t++) {
            k= k + (int)(6 * pow(5,t));
        }
        printf ("k (geschleift): %12d\n",k);
    
        k = for_rekursiv (K,0,p);
        printf ("k (rekursiv): %14d\n",k);
    
        return 0;
    }
    

    SCNR 🙂
    viele grüße
    ralph


Anmelden zum Antworten