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==1
mà return 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==1
mà return 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 ơ!
Bài liên quan
Nên làm theo sơ đồ Horner nó hay hơn.
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
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.cám ơn bạn rất nhiều