Code tính tổng dãy số bằng đệ quy bị sai kết quả

Một tổng S có dạng giống như sau: S = 1^3 + 3^3 + 5^3 + ... + (2n-1)^3.

Cho trước một số nguyên n , bạn hãy viết hàm trả về tổng S theo công thức giống như trên. Nếu không tính được tổng S thì hãy trả về -1 .

Ví dụ:

  • Với n = 7 thì sum_of_cubes_odd_number(n) = 4753.
  • Với n = 13 thì sum_of_cubes_odd_number(n) = 56953.
  • Với n = 27 thì sum_of_cubes_odd_number(n) = 1062153.

Đầu vào/Đầu ra:

  • Đầu vào: interger n

  • Đầu ra: long
    Tổng S có dạng như trên. Do kết quả quá lớn nên bạn hãy chia lấy dư kết quả cho 10^9 + 7. (Nếu đầu vào không hợp lệ thì trả về -1 ).

long long sumOfCubesOddNumber(int n)//n la bien toan cuc
{   if(n<1){
     return -1;
    }
    else if(n==1){
        return 1;
    }
    else{
        return long(pow(2*n-1,3))%1000000007+sumOfCubesOddNumber(n-1);
    }
}
int main (){
int n;
cin>>n;
cout<<sumOfCubesOddNumber(n);
}

EDIT (@library): @Dai_Viet cậu nhớ post code sử dụng markdown ở các post sau nhé!
Ngoài ra, cậu nên mô tả rõ vấn đề hơn. Với input nào mà cậu nhận được kết quả sai vậy? Và kết quả kỳ vọng của cậu là bao nhiêu?
@library em xin tiếp thu ạ;
Bài này là em lấy trên codelearn. khi chay với n=567 thì CT của em ra 139710032284
trong khi output chuẩn là 710031311

  1. Bạn nên đọc hướng dẫn và nội quy khi post bài để format code lại cho đúng
  2. Bạn nhập n bằng bao nhiêu mà không đúng? thật sự nếu bạn chịu khó ngồi tính toán code của bạn chạy như thế nào thì đã không có topic này
  3. Bạn nói n là biến toàn cục nhưng theo như code của bạn, thì ở trong hàm của bạn, nó cũng chỉ là biến cục bộ kể cả khi có một biến toàn cục n ở ngoài đi chăng nữa
  4. Đề của bạn một đằng nhưng biểu thức trong code của bạn là 1 nẻo
  • đề: (2n-1)3 = (2n-1)*10+3
  • code: pow(2*n-1,3) = (2n-1)^3
  1. Với n = 1 thì theo như trên đề bài, đáp án nó phải là 3 chứ nhỉ?
4 Likes

Lỗi của em ,em ẩu quá lần sau sẽ cẩn thân hơn .
Mong anh góp ý giúp em bài trên

1 Like
long sumOfCubesOddNumber(int n)//n la bien toan cuc
{   if(n<1) {
        return -1;
    } else if(n==1) {
		return 1;
	}
    return pow(2*n-1,3) + sumOfCubesOddNumber(n-1);
}
1 Like

rốt cuộc là * hay là ^?
theo ví dụ thì là ^, bạn nên xem lại đề bài mình viết

nguyên nhân sai của bạn ở đây, cũng vì lý do bạn học không tốt môn toán

  • (a + b + c) % x
  • (a % x) + (b % x) + (c % x)

2 biểu thức trên là khác nhau, đề của bạn là lấy theo biểu thức trên, nghĩa là tính xong hết rồi mới chia lấy phần dư, còn bạn thì lấy nhiều phần dư cộng lại

5 Likes

Là mũ(^) anh ạ…Vậy thì không dùng đệ quy dc hả ah

bài này vốn k cần đệ qui, đệ qui cũng dc chả sao

2 Likes

Đầu tiên để unsigned vào, bài này ko có số âm. Và pow có sai số đấy.

Thực ra bài này kiểu tìm công thức tổng quát :smiley: Cái này tìm khá lâu nên để cho dễ nhớ: tổng các lập phương từ 1 đến n bằng bình phương của tổng từ 1 đến n.

2 Likes

Em biết làm bằng vòng lặp rồi chỉ là thấy nó có quy luật để làm đệ quy nên muốn làm .

Đây là tổng lập phương các số lẻ mà

Lấy tổng trừ tổng số lập phương chẵn là ra rồi :smiley:

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