编辑代码

#include <stdio.h>

// 分割土地并计算总面积的递归函数
int divideLandRecursive(int land[], int start, int end) {
    if (start == end) {  // 当土地只有一个时,返回土地面积
        return land[start];
    }
    
    int mid = (start + end) / 2;
    // 分别计算左边和右边土地的总面积
    int leftArea = divideLandRecursive(land, start, mid);
    int rightArea = divideLandRecursive(land, mid + 1, end);
    
    // 计算跨越中间的两块土地的总面积
    int crossArea = land[mid] + land[mid + 1];
    
    // 返回左边、右边和跨越中间的土地的总面积
    return leftArea + rightArea + crossArea;
}

// 分割土地并计算总面积的递推函数
int divideLandIterative(int land[], int n) {
    if (n == 0) {  // 当土地只有一个时,返回土地面积
        return land[0];
    }
    
    int totalArea = 0;
    int i;
    for (i = 0; i < n; i += 2) {
        // 计算每两块土地的总面积,并累加到总面积中
        totalArea += land[i] + land[i + 1];
    }
    
    // 如果土地个数为奇数,将最后一块土地的面积加到总面积中
    if (n % 2 == 1) {
        totalArea += land[n - 1];
    }
    
    // 返回总面积
    return totalArea;
}

int main() {
    int land[] = {3, 1, 6, 2, 4};
    int n = sizeof(land) / sizeof(land[0]);
    
    int totalAreaRecursive = divideLandRecursive(land, 0, n - 1);
    int totalAreaIterative = divideLandIterative(land, n);
    
    printf("递归算法总面积:%d\n", totalAreaRecursive);
    printf("递推算法总面积:%d\n", totalAreaIterative);
    
    return 0;
}