递归判断两数组元素和相等的C语言编程题解法问询
问题分析与正确解法
你的现有解法核心逻辑错误:你写的areArraysEqual函数是在判断两个数组的对应元素是否完全一致,但题目要求的是判断两个数组的元素总和是否相等,这是完全不同的需求——第一个示例中虽然总和相同,但对应元素不全相等,所以你的函数返回false,这是符合你写的逻辑,但不符合题目要求。
正确思路
要递归判断两个数组的元素和是否相等,我们可以通过递归计算两个数组的元素总和,再比较总和是否一致;或者更高效的方式,递归计算两个数组对应元素的差值总和,最终判断差值是否为0。这里我们采用递归计算数组和的方式,逻辑更清晰,且符合题目要求。
实现步骤
- 编写一个递归辅助函数
sumArray,用于计算单个数组的元素总和:- 基准情况:当数组长度为0时,总和为0。
- 递归步骤:返回当前最后一个元素的值,加上前
size-1个元素的总和。
- 在
isEqualSum函数中,调用辅助函数分别计算两个数组的总和,再比较两个总和是否相等。
完整代码
#include <stdbool.h> // 递归计算数组元素总和 int sumArray(int arr[], int size) { if (size == 0) { return 0; } return arr[size - 1] + sumArray(arr, size - 1); } // 题目要求的函数 bool isEqualSum(int arr1[], int arr2[], int size) { return sumArray(arr1, size) == sumArray(arr2, size); }
验证示例
- 对于输入
arr1 = {1, 2, 3, 4},arr2 = {-1, 2, 12, -3},size = 4:sumArray(arr1,4)计算得1+2+3+4=10,sumArray(arr2,4)计算得-1+2+12+(-3)=10,返回true。
- 对于输入
arr1 = {1, 3, 3, 4},arr2 = {-1, 2, 12, -3},size = 4:sumArray(arr1,4)计算得1+3+3+4=11,sumArray(arr2,4)为10,返回false。
符合题目要求的说明
- 未修改原数组:所有操作仅读取元素值,调用函数前后数组原始值保持不变。
- 未使用临时数组:仅通过递归栈存储中间计算结果,无额外临时数组。
- 递归实现:
sumArray采用递归逻辑,满足题目对递归的要求。
内容的提问来源于stack exchange,提问作者Eden Bager
相关产品推荐
相关产品推荐

