我一直试图将这个问题弄清楚一段时间,并且无法找到解决方案。我需要做的是将文件中的元素插入到数组递归中。我意识到只需一个循环就可以轻松完成,但由于这是作业,因此必须以递归方式完成。我想在正确的方向上提示一下。我在理解递归方面遇到了很多麻烦,所以任何帮助都会很好。真正让我困惑的部分是如何将元素实际放入数组中。以下是我到目前为止的情况:
import java.util.*;
import java.io.*;
public class Recursion{
public static void main(String[]args) throws FileNotFoundException{
int i= 0;
int findInts = 0;
// reading file
Scanner scan = new Scanner(new File("heap.dat"));
// finding ints in file
while(scan.hasNextInt()){
findInts = scan.nextInt();
array(findInts);
}
}
public static void array (int findInts) throws FileNotFoundException{
int[] numbers = new int[1000]; // my array must have 1000 elements
if(findInts == 0){
System.out.println();
}
else{
// Im really not sure what to do here
// this gives me the infinite recursion error
array(findInts);
}
}
答案 0 :(得分:0)
任何递归解决方案都需要一个基本案例来决定何时终止递归。如果缺少这个,您将获得无限递归。以下是与您的案例相关的示例:
void addToArray(Scanner scan, int[] numbers, int index){
if (scan.hasNextInt()){
addToArray(scan, numbers, index++); //recursive case
} else {
return; //stop recursion
}
}
注意我故意遗漏了你需要在数组中添加数字的部分。由于这是一个家庭作业,我会让你搞清楚;)
答案 1 :(得分:0)
首先,尝试将递归方法命名为" array"。一个函数应该暗示它的作用。在这种情况下" recursiveInsert"是一个不错的选择。另外,在方法之外声明你的数组。
我还要补充说,递归有一个"基本情况"你实际执行操作的地方(返回一个值,或者在这种情况下插入一个新的数字)和一个"归纳步骤"用新参数再次调用函数的地方(记住,必须始终使用相同的类型。
对于您的情况,看起来您将要有一个已排序的数组。您需要一个ALGORITHM以排序顺序插入这些元素。算法只是解决问题的一种方法。
这是一个提出的算法(它将以log(N)的顺序具有快速运行时间): 查找"二分搜索" BINARY SEARCH 基本上,你检查列表的中间(长度/ 2)。如果它更大,再次检查列表的下半部分并限制开始和结束索引,如果它更小则检查上半部分。
您将已更改方法的签名以接受开始和结束索引。
这里有一些代码可以帮助您入门......
import java.util.*;
import java.io.*;
public class Recursion{
public static void main(String[]args) throws FileNotFoundException{
int i= 0;
int findInts = 0;
int [] array = new int[1000]//DECALRE YOUR ARRAY OUTSIDE METHOD
// reading file
Scanner scan = new Scanner(new File("heap.dat"));
// finding ints in file
while(scan.hasNextInt()){
findInts = scan.nextInt();
Recursive(findInts, 0, 1000, array);
}
}
//insertMe is the num to insert, start and end are the indices
//note that the array is passed to the method
public static void recursiveInsert(int insertMe, int start, int end, int[] array) throws FileNotFoundException{
//BASE CASE
if(start <= end - 1) {
//insert the value at the index by copying the lower and upper halves into other arrays
//and "move" the upper values over to make space.
}
//check the index to see if it fits
if(array[end / 2] > InsertMe) { //check the middle point
recursiveInsert(insertMe, start, end / 2, array); //result is that the middle point was greater
} //so, recursively try again in lower-half
//DO OTHER CODE THINGS HERE
}
&#13;