【问题标题】:Need a recursive function to work on arrays需要一个递归函数来处理数组
【发布时间】:2013-01-16 10:25:32
【问题描述】:

我需要为递归函数编写代码,该函数实际上对一个数组进行操作,并将该数组划分为两个新数组,根据特定条件(例如,使用条件函数 X)大小不等。之后,该函数继续对每个新创建的数组进行操作,直到每个数组仅包含一个元素。你能帮我写一个实际上可以做到这一点的代码吗?我对我需要做什么给出了一个粗略的想法。 :

recursive_function func1 (array) {
    conditional_function X();
    creates, array1[] and array2[]
    perform the same on each of array1 and array2
    until all arr
}

【问题讨论】:

  • 您需要使用Arrays.copyOf 来拆分数组。
  • 您到底遇到了什么问题?创建“条件函数”还是递归?是否真的有必要使用新创建的数组或者您可以“就地”操作。有很多方法可以做到这一点,我们需要更多信息。
  • 那是什么某种条件
  • 递归函数的返回值是多少?你有没有想出一些自己的想法?
  • 尝试编写一个实现,然后返回一个关于您有什么问题的问题。在当前的表述中,这个问题看起来像是老师给你的编程课程作业,只是复制到 Stackoverflow 以便让其他人解决问题。 Stackoverflow 不会为此类问题实现代码,但可以帮助您解决在实现代码时遇到的问题。

标签: java arrays recursion


【解决方案1】:

您可以使用System.arrayCopy 来执行此操作

例如:

import com.greytip.common.utils.StringUtils;

public class Test {
    public static void main(String[] args) {
        Object[] array = new Object[11];
        for (int i = 0; i < array.length; i++) {
            array[i] = i;

        }
        recursive(array);
    }

    private static void recursive(Object[] array) {
        if (array == null || array.length < 2) {
            System.out.println("return: " + StringUtils.join(array));
            return;
        }

        int pos = x(array);

        Object[] part1 = new Object[pos];
        Object[] part2 = new Object[array.length - pos];
        System.out.println("array : " + StringUtils.join(array)
                + ", part1: 0.." + pos + ", part2: " + part1.length + ".."
                + part2.length);

        System.arraycopy(array, 0, part1, 0, part1.length);
        System.arraycopy(array, part1.length, part2, 0, part2.length);

        recursive(part1);
        recursive(part2);

    }

    private static int x(Object[] array) {
        return array.length / 2;
    }
}

【讨论】:

  • 谢谢大家,这段代码真的很有帮助。现在问题已经解决了。
  • @AnirbanDas 请分享您的解决方案,如果此解决方案解决了问题,请将其标记为已接受
  • 真的很抱歉我有限制放代码在这里。我只能说您的代码阐明了我的概念,并且实际上是一种解决方案。谢谢。
猜你喜欢
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2020-11-13
  • 2022-01-09
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多