如何用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
- 通过首先创建一个足够长的数组来保存最终结果,并在递归调用中跟踪追加新数字的位置,使递归更加复杂
- 使用
数据类型而不是数组(如果您的课程已经涵盖了这一点)。添加到列表
很容易列表
- 编写
方法,从而简化递归中的“append”步骤。该方法必须创建一个比输入长的新数组,将输入复制到该数组中,并在末尾插入新值int[]append(int[]arraySoFar,int newValue)
- 您可以将起点增加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
- 通过首先创建一个足够长的数组来保存fi,使递归更加复杂