Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tổng chuỗi 1¹ + 2² + 3³ + ... + nⁿ dùng đệ quy C++

Cho số nguyên n. Tính tổng S = 1¹ + 2² + 3³ + ... + nⁿ.

Lưu ý quan trọng

Bài gốc nhầm lẫn: viết i*i (bình phương) thay vì i^i (lũy thừa). Tổng bình phương là n(n+1)(2n+1)/6. Tổng lũy thừa i^i không có công thức đóng dạng đơn giản, phải tính từng số hạng.

Ví dụ (tổng lũy thừa)

n = 4: 1¹ + 2² + 3³ + 4⁴ = 1 + 4 + 27 + 256 = 288

Đệ quy tính i^i

long long power(int base, int exp) {
    if (exp == 0) return 1;
    return base * power(base, exp - 1);
}

long long sumRecursive(int n) {
    if (n == 0) return 0;
    return power(n, n) + sumRecursive(n - 1);
}

Chương trình C++ đầy đủ

#include <iostream>
using namespace std;

long long power(int base, int exp) {
    long long res = 1;
    for (int i = 0; i < exp; i++) res *= base; // Lặp nhanh hơn đệ quy
    return res;
}

long long calcSeriesSum(int n) {
    long long sum = 0;
    for (int i = 1; i <= n; i++) sum += power(i, i);
    return sum;
}

int main() {
    int n = 7;
    cout << "Tong 1^1 + 2^2 + ... + " << n << "^" << n << " = " << calcSeriesSum(n);
    return 0;
}

Kết quả

Tong 1^1 + 2^2 + ... + 7^7 = 873612

Lưu ý

Giá trị tăng rất nhanh. n=10 đã gần 10¹⁰. Cần long long (đến n≈14) hoặc big integer cho n lớn.