Brauche Hilfe bei rekursiver Funktion



  • Hallo ich habe ein programm geschrieben, welches etwas ausrechnet(was ist erstmal egal),
    allerdings nur bis zum Wert 10, da ich nur 10 verschachtelte schleifen gemacht habe und ich würde nun gerne wissen, wie ich diese in eine Rekursive Funktion bekomme um einen Wert so hoch wie es der Rechner schaft aus zu rechnen.
    Hier die Schleifen:

    for (i[0] = 1; i[0] <= n; i[0]++)
    {
        if (n >= 2)
            for (i[1] = i[0] + 1; i[1] <= n; i[1]++)
            {
                if (n >= 3)
                    for (i[2] = i[1] + 1; i[2] <= n; i[2]++)
                    {
                        if (n >= 4)
                            for (i[3] = i[2] + 1; i[3] <= n; i[3]++)
                            {
                                if (n >= 5)
                                    for (i[4] = i[3] + 1; i[4] <= n; i[4]++)
                                    {
                                        if (n >= 6)
                                            for (i[5] = i[4] + 1; i[5] <= n; i[5]++)
                                            {
                                                if (n >= 7)
                                                    for (i[6] = i[5] + 1; i[6] <= n; i[6]++)
                                                    {
                                                        if (n >= 8)
                                                            for (i[7] = i[6] + 1; i[7] <= n; i[7]++)
                                                            {
                                                                if (n >= 9)
                                                                    for (i[8] = i[7] + 1; i[8] <= n; i[8]++)
                                                                    {
                                                                        if (n >= 10)
                                                                            for (i[9] = i[8] + 1; i[9] <= n; i[9]++)
                                                                            {
                                                                                if (n >= 11)
                                                                                    printf("Error!");
                                                                                else
                                                                                {
                                                                                    b[10] += a[i[0]] * a[i[1]] * a[i[2]] * a[i[3]] * a[i[4]] * a[i[5]] * a[i[6]] * a[i[7]] * a[i[8]] * a[i[9]];
                                                                                }
                                                                            }
                                                                        b[9] += a[i[0]] * a[i[1]] * a[i[2]] * a[i[3]] * a[i[4]] * a[i[5]] * a[i[6]] * a[i[7]] * a[i[8]];
                                                                    }
                                                                b[8] += a[i[0]] * a[i[1]] * a[i[2]] * a[i[3]] * a[i[4]] * a[i[5]] * a[i[6]] * a[i[7]];
                                                            }
                                                        b[7] += a[i[0]] * a[i[1]] * a[i[2]] * a[i[3]] * a[i[4]] * a[i[5]] * a[i[6]];
                                                    }
                                                b[6] += a[i[0]] * a[i[1]] * a[i[2]] * a[i[3]] * a[i[4]] * a[i[5]];
                                            }
                                        b[5] += a[i[0]] * a[i[1]] * a[i[2]] * a[i[3]] * a[i[4]];
                                    }
                                b[4] += a[i[0]] * a[i[1]] * a[i[2]] * a[i[3]];
                            }
                        b[3] += a[i[0]] * a[i[1]] * a[i[2]];
                    }
                b[2] += a[i[0]] * a[i[1]];
            }
        b[1] += a[i[0]];
    }
    

    edit by c.rackwitz: wo bleibt deine einrueckung?



  • Hallo,

    simples Beispiel für Rekursion:

    #include <stdio.h>
    
    int increment(int);
    
    int main(void) {
      int i = increment(0);
      printf("%d\n", i);
      return 0;
    };
    
    int increment(int x) {
      //wenn x == 10 ist, dann abbruch, sonst weiter erhöhen
      return (x==10) ? x : increment(++x);
    };
    

    Wie weit das dein Rechner schafft, kannst du ja mal testen, in dem du den Wert 10 einfach erhöhst, bis nichts mehr geht (=Programm stürzt ab). Wie viel er packt, hängt eben davon ab, was du für ne Mühle hast.

    MfG

    GPC



  • Wenn ich dich richtig verstanden habe willst du ein Programm das etwas möglichst Aufwendiges berechnet. Wie wärs z.B. mit Fibonacci Nummern(rekursiv berechnet) da ist sehr schnell Schluss.



  • Ich möchte damit ein Programm schreiben welches ein PoIynom n-ten gerades ausrechnet, allerdings soll n so hoch sein könn, wir der Rechner es schaft, mein Programm funktioniert bis jetzt bis n<11 aber ich werde es einfach mal anhand des Beispiels versuchen um zu setzen. *schwitz* 😉



  • wie waers, wenn:

    sum = 0.0;
    for(i = 0; i < arrlen; ++i)
    sum += array[i] * pow(x, i);

    oder ganz performant:

    sum = 0.0;
    for(i = 0; i < arrlen; ++i)
    sum = (sum * x) + arr[i];


Anmelden zum Antworten