Calculați exponențiatul prin recursivitate

Calculați exponențiatul prin recursivitate

Problema

Vă rog, aș dori să știu erorile care există în acest algoritm. Pentru informații: acest algoritm este de a calcula metoda exponențială prin recurs.

 #include #include #include int factoriu (int n, int i, int fapt) {if (i = n + 1) {fact = 1; retur; } altceva {fact = fact * i; i ++; factoriel (n, i, de fapt); }} float puissance (int n, int i, float x, float p) {if (i = n + 1) {p = 1; return p; } altceva {p = p * x; i ++; puissance (n, i, x, p); }} int principal () {const float EPS = 0.0001; int i, n, fapt; flotați x, p, s, T; printf ("Donner x:"); scanf ("% f", & x); n = 0; T = 1; s = 0; fapt = 1; p = 1; în timp ce (etajul (T)> EPS) {T = puissance (n, 1, x, p) / factoriel (n, 1); s = s + T; n = n + 1; } printf ("Exp (% f) =% f \ n", x, s); } 

Soluţie

Mai multe erori.

Trec peste absurditatea utilizării recursivității pentru a calcula factoriala și puterea, presupun că ați cerut.

În primul rând, sintaxa detaliată ultra-clasică: testul este ==, nu =. În cele două funcții ar trebui să fie dacă (i == n +1)

Mai rău, în testul altceva ambele funcții, nu există returnare. Funcția dvs. nu întoarce nimic, poate avea o valoare aleatorie. Cred că ideea a fost să avem primul factorial retur (n, i, fapt);

Dar chiar și cu acest factor de corecție și puterea Ta nu va funcționa. Efectuați calcule fine, apoi reveniți la etapa n +1, puteți forța rezultatul la 1!

În cele din urmă, în mâna dvs, ați inițializat p și fapte pe fiecare buclă.

În opinia mea, este mai bine să scrieți funcția factorială și puterea de a lucra prin scăderea valorilor (de la n la 1), mai degrabă decât creșterea de la 1 la n +1. Funcția necesită doar un parametru, este mult mai simplă (nu i, Fact sau p)

Notă

Rezolvați de le père

Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi