Ü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

Önceki Makale Sonraki Makale

En Ipuçları