Apskaičiuokite eksponentinį rekursiją

Apskaičiuokite eksponentinį rekursiją

Problema

Prašau, norėčiau sužinoti šios algoritmo klaidos. Informacijos tikslais: šis algoritmas turi apskaičiuoti eksponentinį metodą rekursijos būdu.

 #include #include #include int factoriel (int n, int i, int faktas) {if (i = n + 1) {faktas = 1; grąžinimo faktas; } else {fact = faktas * i; i ++; faktorielis (n, i, faktas); }} plūduriavimas (int n, int i, plūdė x, plūdė p) {jei (i = n + 1) {p = 1; grįžti p; } other {p = p * x; i ++; pernešimas (n, i, x, p); }} int main () {const float EPS = 0, 0001; int i, n, faktas; plūdė x, p, s, T; printf („Donner x:“); scanf ("% f", & x); n = 0; T = 1; s = 0; faktas = 1; p = 1; o (grindys (T)> EPS) {T = puissance (n, 1, x, p) / faktoris (n, 1, faktas); s = s + T; n = n + 1; } printf ("Exp (% f) =% f", x, s); } 

Sprendimas

Keletas klaidų.

Aš peržengsiu absurdo panaudoti rekursiją apskaičiuoti faktą ir galią, manau, kad jūs to paprašėte.

Pirma, išsami sintaksė „ultra-classic“: testas ==, ne =. Savo dviejose funkcijose turėtų būti, jei (i == n +1)

Dar blogiau, kitoje bandyme abi funkcijas, nėra grįžimo. Taigi jūsų funkcija nieko neduoda, ji gali būti atsitiktinė. Manau, idėja buvo turėti pirmąjį grąžinimo faktorių (n, i, faktas);

Bet net ir su šiuo korekcijos koeficientu ir Tavo galia neveiks. Jūs atliekate puikius skaičiavimus, tada grįžtate į n +1 etapą, galite priversti rezultatą į 1!

Galiausiai, tavo rankoje jūs vėl pradėjote iš naujo ir faktą kiekvienoje kilpoje.

Mano nuomone, geriau rašyti faktinę funkciją ir galią darbui mažinant vertes (nuo n iki 1), o ne didinant nuo 1 iki n +1. Funkcijai reikia tik vieno parametro, jis yra daug paprastesnis (ne i, faktas arba p)

Pastaba

Išspręskite le père

Ankstesnis Straipsnis Kitas Straipsnis

Geriausi Patarimai