Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java中的递归解决这个问题?_Java_Recursion - Fatal编程技术网

如何用Java中的递归解决这个问题?

如何用Java中的递归解决这个问题?,java,recursion,Java,Recursion,' 公共静态int[]生成枚举(int开始,int结束){ //空数组的情况 如果(开始>结束){ int returnEmptyArray[]={}; 返回空数组; } //设置结果数组的大小 如果(开始0){ int sizeOfArray=结束-开始; int result[]=新int[sizeOfArray]; 返回generateNumbers(开始、结束、0、结果); } 返回null; } //递归的帮助方法 公共静态int[]生成枚举(int开始、int结束、int i、int

'

公共静态int[]生成枚举(int开始,int结束){
//空数组的情况
如果(开始>结束){
int returnEmptyArray[]={};
返回空数组;
}
//设置结果数组的大小
如果(开始<0){
int sizeOfArray=end-start-1;
int result[]=新int[sizeOfArray];
}
//设置结果数组的大小
如果(开始>0){
int sizeOfArray=结束-开始;
int result[]=新int[sizeOfArray];
返回generateNumbers(开始、结束、0、结果);
}
返回null;
}
//递归的帮助方法
公共静态int[]生成枚举(int开始、int结束、int i、int[]结果){
i=开始;
如果(i
大家好! 为了解决这个问题,我想尽一切办法。 这个程序应该从开始到结束递归地向上计数,负数也应该包括在内。最后,应将结果放入整数数组中。 示例: 开始:2,结束:5-->结果={2,3,4,5} 开始:-4,结束:3-->结果={-4,-3,-2,-1,0,1,2,3}

如果能给我一个代码片段和一个解释,或者至少是一个解决这个问题的方法,我会非常感激


谢谢大家!

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

例如:

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);
}

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

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

if(...) {
    ...
    return generateNumbers(...);
}
return result;
例如:

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);
}
顺便说一句,在更改
i
的操作后,您显然需要编辑您的条件。

公共静态int[]generateNumbers(int start,int end){
if(...) {
    ...
    return generateNumbers(...);
}
return result;
整数长度=结束-开始+1; 如果(长度结束){ 返回; } 数字[索引]=开始; 生成枚举(开始+1,结束,索引+1,数字); }
公共静态int[]生成枚举(int开始,int结束){
整数长度=结束-开始+1;
如果(长度结束){
返回;
}
数字[索引]=开始;
生成枚举(开始+1,结束,索引+1,数字);
}

我不会给你一个解决方案,而是会详细说明如何找到解决方案

[我们都完全理解,以这种方式创建这样一个整数数组是为了练习递归思维,而不是在生产质量软件中以这种方式完成。]

递归的两个主要问题始终是:

  • 对于给定的任务,如
    generateNumbers(3,7)
    ,如何通过重复使用相同类型的“更简单”任务的结果来解决它
  • 什么任务如此简单以至于我想直接解决它?我应该选择一个案例,在应用问题1中的简化策略时,我肯定会达到这个目的
一个可能的答案是(还有其他可能性):

  • 如果我知道generateNumbers(3,6)的结果,我只需要在末尾附加7,然后我就得到了它。一般化:解决问题
    generateNumbers(start,end-1)
    ,然后追加
    end
  • 如果
    start
    大于
    end
    ,则结果为空数组
实现这一点很简单,但有一个怪癖:在Java中,向数组追加内容并不容易。你可以:

  • 通过首先创建一个足够长的数组来保存最终结果,并在递归调用中跟踪追加新数字的位置,使递归更加复杂
  • 使用
    列表
    数据类型而不是数组(如果您的课程已经涵盖了这一点)。添加到
    列表
    很容易
  • 编写
    int[]append(int[]arraySoFar,int newValue)
    方法,从而简化递归中的“append”步骤。该方法必须创建一个比输入长的新数组,将输入复制到该数组中,并在末尾插入新值
为了向您展示,有许多不同的方法可以使用恢复来解决您的问题,这里有一些其他方法:

  • 您可以将起点增加1并在起点编号前加上,而不是将终点减少1,然后再追加终点编号
  • <> LI>求解<代码>泛型枚举(3,7)< /代码>,您可以在中间找到一些数字,例如5,并通过附上<代码>泛型枚举(3,5)< /COD>和<代码> GuangtQueults(6/7)< /C> >,这意味着您通过巧妙地结合两个递归调用的结果,创建了一个<代码>通用枚举()/<代码>调用的结果。
我不给你一个解决方案,我将通过推理找到解决方案

[我们都完全理解,以这种方式创建这样一个整数数组是为了练习递归思维,而不是在生产质量软件中以这种方式完成。]

递归的两个主要问题始终是:

  • 对于给定的任务,如
    generateNumbers(3,7)
    ,如何通过重复使用相同类型的“更简单”任务的结果来解决它
  • 什么任务如此简单以至于我想直接解决它?我应该选择一个案例,在应用问题1中的简化策略时,我肯定会达到这个目的
一个可能的答案是(还有其他可能性):

  • 如果我知道generateNumbers(3,6)的结果,我只需要在末尾附加7,然后我就得到了它。一般化:解决问题
    generateNumbers(start,end-1)
    ,然后追加
    end
  • 如果
    start
    大于
    end
    ,则结果为空数组
实现这一点很简单,但有一个怪癖:在Java中,向数组追加内容并不容易。你可以:

  • 通过首先创建一个足够长的数组来保存fi,使递归更加复杂