Vypočítejte exponenciál rekurzí

Vypočítejte exponenciál rekurzí

Problém

Prosím, rád bych věděl (a) chybu, která v tomto algoritmu existuje. Pro informaci: tento algoritmus je výpočet exponenciální metody rekurzí.

 #include #include #include int factoriel (int n, int i, int fact) {if (i = n + 1) {fact = 1; návratnost; } else {fact = fakt * i; i ++; factoriel (n, i, fakt); }} float puissance (int n, int i, float x, float p) {if (i = n + 1) {p = 1; výnos p; } jinak {p = p * x; i ++; puissance (n, i, x, p); }} int main () {const float EPS = 0, 0001; int i, n, skutečnost; float x, p, s, T; printf ("Donner x:"); scanf ("% f", & x); n = 0; T = 1; s = 0; fact = 1; p = 1; zatímco (podlaha (T)> EPS) {T = puissance (n, 1, x, p) / faktoriel (n, 1, fakt); s = s + T; n = n + 1; } printf ("Exp (% f) =% f n", x, s); } 

Řešení

Několik chyb.

Předávám absurditu používání rekurze k výpočtu faktoriálu a síly, předpokládám, že jste žádali.

Za prvé, detailní syntaxe ultra-klasická: test je ==, ne =. Ve vašich dvou funkcích by mělo být, pokud (i == n +1)

Horší je, že ostatní testují obě funkce, není návrat. Vaše funkce tedy nevrací nic, může mít náhodnou hodnotu. Myslím, že ten nápad měl mít první faktoriál návratu (n, i, fakt);

Ale ani s tímto korekčním faktorem a vaší moc nebude fungovat. Provedete jemné výpočty, pak se vrátíte do fáze n +1, můžete výsledek vynutit na 1!

Nakonec, v ruce, jste reinitialize p a skutečnost na každé smyčce.

Podle mého názoru je lepší zapsat faktorovou funkci a sílu do práce snížením hodnot (z n na 1) a nikoli zvýšením z 1 na n +1. Funkce vyžaduje pouze jeden parametr, je mnohem jednodušší (ne i, fakta nebo p)

Poznámka

Řešit le père

Předchozí Článek Následující Článek

Nejlepší Tipy