Üstel özyinelemeli hesaplayın
Üstel özyinelemeli hesaplayın
Konu
Lütfen, bu algoritmada mevcut olan hataları bilmek istiyorum. Bilgi için: bu algoritma üstel yöntemi özyinelemeyle hesaplamak içindir.
#include #include #include int factoriel (int n, int i, int olgu) {if (i = n + 1) {fact = 1; geri dönüş gerçeği; } else {fact = fact * i; i ++; faktöriyel (n, i, aslında); }} float yüzerliği (int n, int i, float x, float p) {if (i = n + 1) {p = 1; dönüş p; } else {p = p * x; i ++; Puissance (n, i, x, s); }} int main () {const float EPS = 0.0001; int i, n, gerçek; şamandıra x, p, s, T; printf ("Donner x:"); scanf ("% f", & x); n = 0; T = 1 'dir; s = 0; Aslında = 1 'dir; p = 1 'dir; while (floor (T)> EPS) {T = ergenlik (n, 1, x, p) / factoriel (n, 1, gerçek); ş = s + T; n = n + 1 'dir; } printf ("Exp (% f) =% f \ n", x, s); }
Çözüm
Birkaç hata
Faktoring ve gücü hesaplamak için özyinelemeyi kullanmanın saçmalığını aştım, sanırım sizden istedim.
İlk olarak, detaylı sözdizimi ultra-klasik: test ==, = değil. İki fonksiyonunuzda ise şöyle olmalı (i == n + 1)
Daha kötüsü, else testinde her iki fonksiyonu da geri dönüş yok. Böylece fonksiyonunuz hiçbir şey döndürmez, rastgele bir değer alabilir. Sanırım fikri ilk dönüş faktoringine sahip olmaktı (n, ben, gerçek);
Ama bu düzeltme faktörü ve senin gücün bile işe yaramaz. İnce hesaplamalar yaparsınız, sonra n + 1 aşamasına geri dönersiniz, sonucu 1'e zorlayabilirsiniz!
Sonunda, elinizde, her döngüde p ve gerçeği yeniden başlatırsınız.
Bence faktör işlevini ve çalışma gücünü 1'den n + 1'e çıkarmak yerine değerleri (n'den 1'e) düşürerek yazmak daha iyidir. İşlev yalnızca bir parametre gerektirir, çok daha basittir (no i, Fact veya p)
Not
Le père tarafından çöz