You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C/C++递归实现最大相邻数对差值问题求助

解决递归求最大相邻数对差值的问题

我明白你的需求啦——不想用数组额外位置存结果,只让递归函数接收数组和长度两个参数对吧?咱们来一步步修正这个问题:

原代码的问题

首先看你原来的实现,硬编码用arr[6]存最大值,这只能固定处理长度为7的数组,而且不符合“不依赖数组存储结果”的要求;另外递归参数用的是当前索引i,也不符合你想要的“仅传数组和长度”的要求。

优化后的递归思路

递归的核心是把问题拆成更小的子问题:

  • 终止条件:当数组长度为2时,直接返回这两个元素的绝对差值(因为只有一对相邻元素)。
  • 递归步骤:对于长度为n的数组,先计算最后一对相邻元素的绝对差值,再递归计算前n-1个元素的最大相邻差值,最后返回这两个值里较大的那个。

这样完全不需要额外存储,每一层递归都会把当前子数组的最大差值返回给上层,完美符合你的要求。

完整代码实现

#include <stdio.h>
#include <stdlib.h> // 用于abs函数计算绝对值

int maxAdjacentDiff(int arr[], int n) {
    // 终止条件:只剩两个元素时,返回它们的绝对差值
    if (n == 2) {
        return abs(arr[1] - arr[0]);
    }
    // 计算当前最后一对相邻元素的绝对差值
    int currentDiff = abs(arr[n-1] - arr[n-2]);
    // 递归求前n-1个元素的最大相邻差值
    int prevMax = maxAdjacentDiff(arr, n-1);
    // 返回当前差值和前序最大值中的较大者
    return currentDiff > prevMax ? currentDiff : prevMax;
}

int main() {
    int arr[] = {4, 6, -2, 10, 3, 1, 2};
    int arrLen = sizeof(arr) / sizeof(arr[0]);
    int result = maxAdjacentDiff(arr, arrLen);
    printf("最大相邻数对差值:%d\n", result); // 输出12,符合预期
    return 0;
}

验证结果

咱们手动算一下你的测试数组:
相邻元素差值的绝对值分别是:2、8、12、7、2、1,最大的就是12,和预期一致。

内容的提问来源于stack exchange,提问作者Lejik007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:34:40