Beregn eksponentiel ved rekursion

Beregn eksponentiel ved rekursion

Problem

Jeg vil gerne vide, hvilken fejl der findes i denne algoritme. Til information: Denne algoritme er at beregne den eksponentielle metode ved rekursion.

 #include #include #include int faktoriel (int n, int jeg, int fact) {hvis (i = n + 1) {faktum = 1; tilbagevenden faktum; } ellers {fact = fact * i; i ++; factoriel (n, i, faktisk); }} float puissance (int n, int i, float x, float p) {hvis (i = n + 1) {p = 1; return p; } ellers {p = p * x; i ++; puissance (n, i, x, p); }} int main () {const float EPS = 0.0001; int jeg, n, faktum; float x, p, s, T; printf ("Donner x:"); scanf ("% f", & x); n = 0; T = 1; s = 0; Faktisk = 1; p = 1; mens (gulv (T)> EPS) {T = puissance (n, 1, x, p) / faktoriel (n, 1, faktum); s = s + T; n = n + 1; } printf ("Exp (% f) =% f \ n", x, s); } 

Opløsning

Flere fejl.

Jeg passerer over absurditeten ved at bruge rekursion til at beregne den faktorielle og magt, jeg formoder, du har bedt om.

For det første detaljeret syntaks ultra-klassisk: testen er ==, ikke =. I dine to funktioner skal være, hvis (i == n +1)

Værre, i den anden test begge funktioner, er der ingen tilbagevenden. Så din funktion returnerer intet, det kan tage en tilfældig værdi. Jeg antager, at ideen var at få den første tilbagevendende faktor (n, jeg, faktum);

Men selv med denne korrektionsfaktor og din magt vil det ikke fungere. Du laver fine beregninger og vender tilbage til scenen n +1, du kan tvinge resultatet til 1!

Endelig har du i din hånd genoprettet p og kendsgerning på hver løkke.

Efter min mening er det bedre at skrive den fakultative funktion og magt til at arbejde ved at reducere værdier (fra n til 1) i stedet for at øge fra 1 til n +1. Funktionen kræver kun en parameter, det er meget enklere (nej jeg, fakta eller p)

Bemærk

Løs ved le père

Forrige Artikel Næste Artikel

Top Tips