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

Chương trình tính trung bình mảng (lặp và đệ quy) trong C++


Cho mảng N số nguyên arr[N], nhiệm vụ là tìm trung bình cộng. Có thể dùng cách lặp (iterative) hoặc đệ quy (recursive). Cả hai cách đều được trình bày.

Trung bình = tổng các phần tử / số phần tử.

Phương pháp lặp (Iterative)

Sử dụng vòng lặp for, while, do-while để duyệt và cộng dồn.

Ví dụ

Đầu vào: arr[] = {1, 2, 4, 5, 8}

Đầu ra: 4

Giải thích: Tổng = 20, số phần tử = 5, TB = 20/5 = 4

Thuật toán lặp

double trungBinhLap(int arr[], int size) {
    int tong = 0;
    for (int i = 0; i < size; i++)
        tong += arr[i];
    return (double)tong / size;
}

Phương pháp đệ quy (Recursive)

Gọi hàm tự lặp lại cho đến khi duyệt hết mảng. Giá trị trả về lưu trong stack.

Ví dụ

Đầu vào: arr[] = {2, 4, 6, 8}

Đầu ra: 5

Giải thích: Tổng = 20, số phần tử = 4, TB = 5

Thuật toán đệ quy

double deQuy(int arr[], int i, int size) {
    if (i == size - 1) return arr[i];
    if (i == 0) return (arr[i] + deQuy(arr, i+1, size)) / size;
    return arr[i] + deQuy(arr, i+1, size);
}

double trungBinhDeQuy(int arr[], int size) {
    return deQuy(arr, 0, size);
}

Ví dụ mã nguồn hoàn chỉnh

#include <iostream>
using namespace std;

// Lặp
double trungBinhLap(int arr[], int size) {
    int tong = 0;
    for (int i = 0; i < size; i++) tong += arr[i];
    return (double)tong / size;
}

// Đệ quy
double deQuy(int arr[], int i, int size) {
    if (i == size - 1) return arr[i];
    if (i == 0) return (arr[i] + deQuy(arr, i+1, size)) / size;
    return arr[i] + deQuy(arr, i+1, size);
}

double trungBinhDeQuy(int arr[], int size) {
    return deQuy(arr, 0, size);
}

int main() {
    int arr1[] = {2, 3, 1, 6, 8, 10};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    cout << "Trung bình (lặp): " << trungBinhLap(arr1, size1) << endl;

    int arr2[] = {1, 5, 3, 2, 6, 7};
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    cout << "Trung bình (đệ quy): " << trungBinhDeQuy(arr2, size2) << endl;
    return 0;
}

Kết quả chạy chương trình

Trung bình (lặp): 5
Trung bình (đệ quy): 4