คำนวณเลขชี้กำลังด้วยการเรียกซ้ำ

คำนวณเลขชี้กำลังด้วยการเรียกซ้ำ

ปัญหา

โปรดฉันต้องการทราบข้อผิดพลาดที่มีอยู่ในอัลกอริทึมนี้ สำหรับข้อมูล: อัลกอริทึมนี้คือการคำนวณวิธีเอ็กซ์โพเนนเชียลโดยการเรียกซ้ำ

 #include #include #include int factoriel (int n, int i, int int) {ถ้า (i = n + 1) {fact = 1; คืนความจริง } else {ข้อเท็จจริง = ข้อเท็จจริง * i; i ++; factoriel (n, i, ความเป็นจริง); }} float puissance (int n, int i, float x, float p) {ถ้า (i = n + 1) {p = 1; กลับ p; } else {p = p * x; i ++; พละกำลัง (n, i, x พี); }} int main () {const float EPS = 0.0001; int i, n, ความจริง; float x, p, s, T; printf ("Donner x:"); scanf ("% f", & x); n = 0; T = 1; s = 0; ความเป็นจริง = 1; p = 1; ในขณะที่ (floor (T)> EPS) {T = puissance (n, 1, x, p) / factoriel (n, 1, ข้อเท็จจริง); s = s + T; n = 1 + n; } printf ("Exp (% f) =% f \ n", x, s); } 

สารละลาย

ข้อผิดพลาดหลายอย่าง

ฉันผ่านความเหลวไหลของการใช้การเรียกซ้ำเพื่อคำนวณแฟคทอเรียลและพลังงานฉันคิดว่าคุณต้องการ

ครั้งแรกที่มีรายละเอียดไวยากรณ์พิเศษคลาสสิก: การทดสอบคือ ==, ไม่ = ในสองฟังก์ชันของคุณควรจะเป็นถ้า (i == n +1)

ที่เลวร้ายยิ่งกว่านั้นในการทดสอบทั้งสองฟังก์ชั่นจะไม่มีการส่งคืน ดังนั้นฟังก์ชั่นของคุณจะไม่ส่งคืนอะไรเลยอาจใช้ค่าสุ่ม ฉันเดาว่าความคิดนี้จะมีแฟคทอเรียลคืนแรก (n, i, ข้อเท็จจริง);

แต่ถึงแม้จะมีปัจจัยการแก้ไขนี้และพลังของเจ้าจะไม่ทำงาน คุณทำการคำนวณที่ดีจากนั้นกลับสู่สเตจ n +1 คุณสามารถบังคับผลลัพธ์ให้เป็น 1 ได้!

ในมือของคุณคุณได้กำหนดค่าเริ่มต้นใหม่และข้อเท็จจริงในแต่ละวง

ในความคิดของฉันมันจะดีกว่าที่จะเขียนฟังก์ชั่นปัจจัยและพลังในการทำงานโดยการลดค่า (จาก n เป็น 1) แทนที่จะเพิ่มจาก 1 เป็น n +1 ฟังก์ชั่นต้องการเพียงหนึ่งพารามิเตอร์มันง่ายกว่ามาก (no i, Fact หรือ p)

บันทึก

แก้ปัญหาโดย le père

บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม