01/10/2018, 13:58

Nghịch lý trong hàm đệ quy đuôi?

Chào các anh chị em. Mình có 1 bài toán yêu cầu giải bằng đệ quy đuôi.
Bài toán như sau. Tính: x + x^2 + x^3 + … + x^n (x và n nhập từ bàn phím và n bắt đầu từ 1)
Em làm như sau:

float dequyduoi(float x,int n,float y = ?) // k biết nên gán y = gì???
{
	if(n==1)
	return x;
	return dequyduoi(x,n-1,y + pow(x,n));
}

Nếu n==1return x; nhưng như thế thì lúc chạy từ n về 1 thì nó sẽ return x ban đầu chứ k phải là x kết quả
Nếu n==1return y; thì mới đúng cú pháp nhưng vậy thì gán y = gì, gán y = x thì lỗi.
Mong được giúp đỡ, cám ơ!

rogp10 viết 16:14 ngày 01/10/2018

Nên làm theo sơ đồ Horner nó hay hơn.

Phan Vũ viết 16:01 ngày 01/10/2018

nếu gán y = 0 và nếu n==1 và return y; thì sẽ thiếu 1 giá trị là x, khi đó kq bài toán chỉ là x^2 + x^3 + … + x^n

rogp10 viết 16:14 ngày 01/10/2018

Nếu đệ quy đuôi có suy biến thì kết quả lúc nào cũng là x cho mà xem Vậy trường hợp dừng phải có return y + .... Giờ bạn dùng logic này áp dụng ngay khi n == 1 xem, từ đó suy ngược ra và c/m luôn.

Phan Vũ viết 16:10 ngày 01/10/2018

cám ơn bạn rất nhiều

Bài liên quan
0