Giúp kiểm tra code đệ quy tính dãy số

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)  ;
		
	}
	
}
  1. Sao lại dùng floatdouble? Bài này dùng long long là được.
  2. Đâu phải tính dãy theo kiểu Fobonacci đâu mà trả về n*cau3b(n-1) + (n-1)*cau3b(n-2). Đây là tính tổng.
  3. Lẻ loi quá:
deleted

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
}
2 Likes

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

1 Like

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

2 Likes

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 :cold_face:

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.

3 Likes

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

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?