首页 > 解决方案 > 如何用 Java 中的递归解决这个问题?

问题描述

public static int[] generateNumbers(int start, int end) {
    // case for empty array
    if (start > end) {
        int returnEmptyArray[] = {};
        return returnEmptyArray;
    }

    // setting size of the result array
    if (start < 0) {
        int sizeOfArray = end - start - 1;
        int result[] = new int[sizeOfArray];
    }

    // setting size of the result array
    if (start > 0) {
        int sizeOfArray = end - start;
        int result[] = new int[sizeOfArray];
        return generateNumbers(start, end, 0, result);
    }

    return null;
}

// helping method for recursion
public static int[] generateNumbers(int start, int end, int i, int[] result) {
    i = start;
    if (i < end) {
        result[i] = i;
        i++;
    }

    return generateNumbers(start, end, ++i, result);
}

大家好你们好!我已经尝试了我能想到的一切来解决这个问题。这个程序应该从头到尾递归地向上计数,负数也应该包括在内。最后,结果应该放入一个整数数组中。示例: start: 2, end: 5 --> result = {2, 3, 4, 5} start: -4, end: 3 --> result = {-4, -3, -2, -1, 0 , 1, 2, 3}

我会非常感谢代码片段和解释,或者至少是我可以解决这个问题的方法。

标签: javarecursion

解决方案


您的代码中有一些非常奇怪的部分。

例如这个:

 if (start < 0) {
     int sizeOfArray = end - start - 1;
     int result[] = new int[sizeOfArray];
 }

毫无意义,您正在if条件下创建局部变量并且从不使用它们。

您的计算sizeOfArray是错误的,应该是end - start + 1,而且,没有理由检查 start 是正数还是负数,全部放弃。然后, remove return null,这是一个死代码。

对于您的子例程函数,您不能只在与您要写入的数字相同的索引上写入数组,您将得到ArrayIndexOutOfBoundsException. 例如,如果您的 start 是 -4,您基本上(在第一次通话中)会尝试 do result[-4] = -4,这显然是无稽之谈。

更好的解决方案是将索引值保存在i(从 0 开始)并将此值添加到 start: result[i] = start + i

此外,++i调用是错误的,因为你i++在它之前调用,所以你实际上将 i 增加了 2 而不是 1。

您的子程序也没有终止条件 - 它永远不会结束。试着把它的格式:

if(...) {
    ...
    return generateNumbers(...);
}
return result;

顺便说一句,您显然需要在更改内容后编辑您的条件i


推荐阅读