当前位置: 首页 > 知识库问答 >
问题:

数组中两个值之差的递归函数

商昆琦
2023-03-14

我在用Java。

我需要实现一个递归函数,计算每两个值之间的差值,并返回大小为2的数组[MAXIMUM_DIFF,STARTINDEX]

对于以下阵列:

arr = {1, 4, 60, -10, 2, 7, 56, -10}

递归方法返回大小为2的数组:[70,2],因为最大差值为70(60-(-10)=70),60的索引为2。

我有90%来自解决方案:

public static int[] getMax(int[] arr) {

    int [] retArr = new int[2];

    if(arr.length == 1)
        return retArr;
    else {
        return getMax(arr, retArr);
    }

}

public static int[] getMax(int[] arr, int[] retArr) {
    if(retArr[1] == arr.length - 1)
        return retArr;

    int currentMaxVal = arr[retArr[1]] - arr[retArr[1] + 1];

    if(currentMaxVal > retArr[0]) {
        retArr[0] = currentMaxVal;
    }

    retArr[1] = retArr[1] + 1;

    return getMax(arr, retArr);

}

但是结果是[70,7]而不是[70,2],因为这行retArr[1]=retArr[1]1

这是因为我不知道在哪里保存索引,所以如何保存索引?

*我不确定第二个参数的getMax(int[]arr, int[]retArr)它可以是不同的也许

我不能添加其他参数,可能是为了更改getMax(int[]arr,int[]retArr)的第二个参数,我不能使用静态变量


共有1个答案

任伟
2023-03-14
if(currentMaxVal > retArr[0])
{
  retArr[0] = currentMaxVal;
}

retArr[1] = retArr[1] + 1;

应该是

if(currentMaxVal > retArr[0])
{
  retArr[0] = currentMaxVal;
  retArr[1] = currentIndex;
}

并且当前索引应该是传递给函数的附加参数。(

更新:

我认为这里的重点是理解“分而治之”,即把问题分解成一个较小的问题,然后再进行排序,找出最好的问题。类似的情况(如果比正常情况更尴尬)

public static int[] getMax(int[] arr, int[] retArr) {
    // Return case
    if (retArr[1] >= arr.length - 1)
        return new int[] { Integer.MIN_VALUE, retArr[1] };

    // Save context
    int index = retArr[1];
    int value = arr[index] - arr[index + 1];

    // Call recursion
    retArr[1]++;
    int[] temp = getMax(arr, retArr);

    // Return best between current case and recursive case
    if (temp[0] > value)
        return temp;
    else
        return new int[] { value, index };
}

递归函数的每个调用(或堆栈)都是它自己的上下文。这意味着其中声明的变量不会在递归调用中被覆盖。这个想法是,你递归地分解一个难题,直到你不能再分解它。然后你把每个电话的结果一次一个地放在一起解决,直到你有最终的答案。(这在像斐波那契序列这样不那么琐碎的情况下效果更好)还要注意,任何可以在循环中完成的事情总是比递归更有效。

 类似资料:
  • 我正在尝试解决此问题: 一位物理教授给班上的学生做项目。学生们必须组成一个两人小组来做这个项目。教授让学生来决定队伍。一个班级的学生人数将是偶数。 每个学生都有自己的知识水平。它告诉每个学生有多少知识。一个团队的知识水平是两个学生知识水平的总和。 学生们决定组成小组,这样知识最高的团队和知识最低的团队之间的差异就最小了。 投入 输入的第一行将包含测试用例的数量t;在接下来的t行中,第一个数字是n,

  • 问题内容: 我有以下两个数组。我想要这两个数组之间的区别。也就是说,如何找到两个数组都不存在的值? 问题答案: 注意: 这个答案将返回的值是不存在的,它不会返回值不在。

  • 问题内容: 因此,我有一个python字典,将其称为,然后在稍后的某个时间将该字典的版本称为。我想找到和之间的所有更改。换句话说,添加,删除或更改的所有内容。棘手的是,值可以是整数,字符串,列表或字典,因此需要递归。这是我到目前为止所拥有的: 除非该值是一个列表,否则它将正常工作。我无法提出一种优雅的方式来处理列表,而又没有在此函数之后重复重复使用该函数的巨大变化。 有什么想法吗? 编辑:这与这篇

  • 我试图创建一个递归函数,查找数组中低整数和高整数之间的最大数字。 我尝试了这个函数,它可以帮助递归地查找数组中的最大元素。我只是不知道如何向函数中添加一个低整数和一个高整数,以找到这两个整数之间的最大值。 目标是有一个看起来像这样的函数:

  • 考虑Python中的这个基本递归: 根据斐波那契数列的(n-1)(n-2)函数,这是有道理的。 Python如何执行包含另一个递归的递归,这个递归不在同一代码行内,而是在同一代码行内?“finobacci(number-1)”是否完成所有递归,直到它到达“1”,然后它对“fibonacci(number-2)”做同样的事情,并将它们相加? 作为比较,下面的递归函数将一个数“x”提升为“y”的幂,我