01/10/2018, 09:54
Check lỗi code C/C++
pro nào chỉ e lỗi sai với, e suy nghĩ hoài mà k ra, đề bài bắt buộc sự dụng đệ quy. Cảm ơn mọi người!
//s(x,n)=1 + x + x^3/3! + x^5/5! +…+ x^2n+1/2n+1!
#include "conio.h"
#include "stdio.h"
#include "math.h"
float luythua(float x, int n)
{
if (n == 0)
return 1;
return luythua(x, n - 1)* pow(x, 2 * n + 1);
}
float giaithua(int n)
{
if (n == 0)
return 1;
return giaithua(n - 1)*n;
}
float ltchiagt(float x, int n)
{
if (n == 0)
return 1;
return ltchiagt(x, n - 1) + ((luythua(x, n - 1)* pow(x, 2 * n + 1)) / (giaithua(2*n)*(2 * n + 1)));
}
int main()
{
float kq = ltchiagt(4, 3);
printf("ket qua =%f", kq);
getch();
return 0;
}
Bài liên quan
Format lại code nhé. Thêm 3 dấu ` vào đầu và cuối code.
Bài này thì bạn đệ quy giai thừa thôi nhé. Còn S(x, n) không cần đệ quy, chỉ cần vòng lặp thôi.
phần lũy thừa, mình nghĩ chỗ đệ quy sẽ là :
return luythua (x,n-1)*x;
theo mình thì luythua (x,n-1)x thi mỗi lần mũ của x chỉ tăng lên 1 giá trị—> vd: n=0–>1, n=1–>> 1x=x, n=2–> x*x=x^2,…->>>>> sai.
Đề bài là sau mỗi lần số mũ tăng 2n+1 lần.
Sử dụng vòng lặp như bạn cũng được nhưng đề bài yêu cầu sử dụng đệ quy nhị phân để giải.
Mình nghĩ code trên sai ở ltchiagt mà chưa biết phải sửa sao.
À, thế thì đệ quy nhị phân sẽ ở hàm số mũ.
somu(n, k) = somu(n/2, k) * somu(n/2, k) * somu(n%2, k)
.Bạn có thể giải thích rõ hơn cho mình hàm này được không, có vd minh họa càng tốt.
Nếu được thì trong bài tập này mình nên sử dụng hàm này như thế nào.
Giải thích hàm nhé:
Hàm
somu(n, k)
là hàm đệ quy, hàm nàyreturn somu(n, n/2) * somu(n, n/2) * somu(n, n%2)
n^(2k) = (n^k)^2 = n^k * n^k (* n^0)
n^(2k+1) = n^(2k)*n = n^k * n^k * n
Hàm tính lũy thừa bạn viết sai rồi, dùng đệ quy mà lại dùng hàm Pow (pow là hàm tính lũy thừa luôn rồi còn gì )
Phải return luythua(x, n - 1)* x
minh đang suy nghĩ hàm đê quy nhị phân mũ theo một sô bạn gợi ý, đã sửa lại theo ý bạn.Kết quả sau khi sửa:
Hình như bạn đang hiểu sai bản chất của các hàm luỹ thừa. Hàm này của bạn chưa viết bằng đệ quy nhị phân, bạn mới viết bằng đệ quy tuyến tính.
ltchiagt
bằng đệ quy. Chỉ cần dùng for là đủ:Mình đã hiểu rõ hơn về bản chất hàm lũy thừa, cảm ơn bạn đã góp ý, đệ quy nhị phân mình vẫn chưa hình dung ra cách code, điều kiện dừng, bạn có thể code vd minh họa cho bài tập này được không. Code đệ quy tuyến tính đã sửa:
Đệ quy nhị phân:
Bạn đọc lại các cmt trước.
Mình đã hiểu ra vấn đề, cảm ơn bạn nhé. Trả bài đệ quy nhị phân: