01/10/2018, 09:44

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 
", Tong(5));
	getch();
	return 0;
}
Trần Hoàn viết 11:58 ngày 01/10/2018

i <= n nhé

Thành Duy viết 11:56 ngày 01/10/2018

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

Lương Quang Mạnh viết 11:53 ngày 01/10/2018

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

Nguyen Trong Dung viết 11:48 ngày 01/10/2018

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

Trần Hoàn viết 11:54 ngày 01/10/2018

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à

Thành Duy viết 11:57 ngày 01/10/2018

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

Thành Duy viết 11:50 ngày 01/10/2018

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

Thành Duy viết 11:52 ngày 01/10/2018

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

Trần Hoàn viết 11:58 ngày 01/10/2018
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);
}
Thành Duy viết 12:00 ngày 01/10/2018

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

Trần Hoàn viết 11:44 ngày 01/10/2018

Đệ 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 :))

Thành Duy viết 11:48 ngày 01/10/2018

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

#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;
}
Trần Hoàn viết 11:55 ngày 01/10/2018

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ì.

Thành Duy viết 11:46 ngày 01/10/2018

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

rogp10 viết 11:53 ngày 01/10/2018

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

Bài liên quan
0