Mọi người giúp mình kiểm tra bài đệ quy này bị sai chỗ vào với
float cau3b(float n)
{
if(n==1||n==0)
{
return 1;
}
double xn=0;
if(n>1)
{
return n*cau3b(n-1) + (n-1)*cau3b(n-2) ;
}
}
Mọi người giúp mình kiểm tra bài đệ quy này bị sai chỗ vào với
float cau3b(float n)
{
if(n==1||n==0)
{
return 1;
}
double xn=0;
if(n>1)
{
return n*cau3b(n-1) + (n-1)*cau3b(n-2) ;
}
}
float
và double
? Bài này dùng long long
là được.n*cau3b(n-1) + (n-1)*cau3b(n-2)
. Đây là tính tổng.Bạn có đệ quy tính tổng: 1 + 2 + 3 +4 +...+n chưa? Nó tương tự vậy thôi.
sum(n){
if(n==1){
return 1;
}
return n + sum(n-1); // để ý kĩ chỗ này
}
Mình thử rồi ko đơn giảng là tính tổng đâu, cấu trúc bài này là n*x(n-1). Mình bị vướng con n phía trước.
Bạn tự viết công thức ra
x[n-1] =…
x[n] =…
Xem liên hệ của 2 công thức
Dạ, mình làm rồi. Và chưa ra.
Bạn cứ viết lên đây, hoặc chụp lại
Còn bạn nói mà không có gì để show ra như vậy thì sao biết bạn bị vấn đề gì mà giúp được
Mình sai thật.
Nếu dùng vòng lặp thì nó sẽ là nhiều vòng lặp lồng nhau n lần. n^n
Có phải dãy từ x_{0} đến x_{19} là:
x: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
v: 1 1 3 12 60 360 2520 20160 181440 1814400 19958400 239500800 3113510400 43589145600 653837184000 10461394944000 177843714048000 3201186852864000 60822550204416000 1216451004088320000
Mình áp dụng đệ quy và vòng lặp (bên trong hàm đệ quy) thì ổn.
Sau 1 lúc tìm hiểu thì mình thấy nó có liên quan đến giai thừa.
Đã thử cả 3 cách: Đệ quy + lặp, Công thức truy hồi và Công thức tổng quát, đều cho kết quả giống nhau với 20 giá trị đầu tiên (x_{0} \rightarrow x_{19}). Tối đa là đến x_{19} vì tới hạn của long long
.
▸
Mình chạy tay cx ra kết quả như thế này, nhưng lại ko đưa vô code đc. Bạn cho mình xin code nha.
x[n-1] = x[0] +2*x[1] + 3*x[2] +... + (n-1)*x[n-2]
x[n] = x[0] +2*x[1] + 3*x[2] +... + (n-1)*x[n-2] + n*x[n-1]
x[n] = x[n-1] + n*x[n-1] = (n+1)*x[n-1]
Thay vế else lại là:
return (n+1)*cau3b(n-1)
Tinh ý một chút sẽ thấy x[n] = (n+1)! /2
Bảo viết ra giấy cũng không thèm viết