Lỗi Đệ Quy, anh em nào tìm được ko

Có dãy Tribonacci T = 1+2+3+6+11+20+37+68+125+… Code của em ko ra kết quả đúng :((

/*T=1+2+3+6+11+20+37+68+125+...*/
#include <stdio.h>
#include <conio.h>

long H(int n) {
	if (n < 4) return n;
	else return H(n - 1) + H(n - 2) + H(n - 3);
}

long Tong(int n) {
	long sum = 0;
	for (int i = 1; i < n; i++)
		sum += H(i);
	return sum;
}

int main(int argc, char const *argv[])
{
	printf("%ld \n", Tong(5));
	getch();
	return 0;
}

i <= n nhé

Ban đầu em cũng cho i <= n nhưng vẫn ko đúng

Thay i <= n đúng mà bạn

Tong(5) => 0 1 2 3 4
H(4) = 0 1 2 3
4 = H(3) + H(2) + H(1) ?

Thế 1 + 2 + 3 + 6 + 11 không bằng 23 thì bằng mấy?
Trong hàm đệ quy của em, H(1) == 1, H(2) == 2… mà

OK em hiểu vấn đề rồi cám ơn anh, em lại cứ nghĩ là mình làm in ra dãy 1 + 2 + 3 +… quên là in ra tổng S :)))

Em hiểu vấn đề rồi, cám ơn ae

Ok e hiểu vấn đề rồi, cám ơn ae

long H(unsigned int n)
{
	if (n < 4)
		return n;
	return H(n - 1) + H(n - 2) + H(n - 3);
}

long Tong(unsigned int Input)
{
	if (n <= 1)
		return 1;
	return H(n) + Tong(n - 1);
}

dùng thêm đệ quy nó có tối ưu thời gian ko a

Đệ quy lúc nào cũng là không tối ưu về mặt thời gian. Chỉ là code nó ngắn gọn đỡ phải mất công nghĩ tên biến thôi :))

1 Like

Thế nên e cũng khử nó rồi :slight_smile:

#include <stdio.h>
#include <conio.h>

long Tong (int n) {
	long h1 = 1, h2 = 2, h3 = 3, h, sum = 6;
	if (n == 1) return 1;
	else if (n == 2) return 3;
	else if (n == 3) return 6;
	else {
		for (int i = 4; i <= n; i++) {
			h = h3 + h2 + h1;
			sum += h;
			h1 = h2;
			h2 = h3;
			h3 = h;
		}
		return sum;
	}
}

int main()
{
	printf("%ld \n", Tong(5));
	getch();
	return 0;
}

Có thể trong bài tập thì như vậy không vấn đề. Nhưng nói chung là không ai muốn nhìn code như thế của em cả.
Ít nhất cũng phải làm như ban đầu, tách H và Tong ra làm 2 hàm riêng biệt, để người ta đọc code còn hiểu em muốn làm gì.

1 Like

Ok em cám ơn, vì mới học nên code e vẫn chưa rõ ràng

Fibo(n) (1, 1) thì có tổng là Fibo(n+2) - 1 (quy nạp), còn Tribo thì chắc cũng có công thức đó. Nhưng Tribo giải khá cực :smiley:

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