java - 如何用 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}
我会非常感谢代码片段和解释,或者至少是我可以解决这个问题的方法。
解决方案
您的代码中有一些非常奇怪的部分。
例如这个:
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
。
推荐阅读
- c# - 为什么ui文本中的值闪烁,我怎样才能让它不闪烁?
- assembly - 在 LC3 中连接 3 个字符串
- django - Django 和 S3 Bucket aws Admin 静态文件
- python - Pandas - 添加与另一列同名的另一列
- c# - 在 C# 中分隔两个单独的字符串
- arrays - 如何启动结构的特定术语
- reactjs - 反应 onblur 不执行处理程序
- java - 无法将 ModelAttribute 中的 MultipartFile 与 Thymeleaf 一起使用
- c# - C# WPF 使用触发器将样式对象添加到 Datagrid 中的单元格
- php - Codecept Yii2 Docker 404