當我運行下面的程序我收到以下錯誤:(?任何想法)BinaryRecursion錯誤消息:的StackOverflowError
Exception in thread "main" java.lang.StackOverflowError
at SumArray.binarySum(SumArray.java:31)
at SumArray.binarySum(SumArray.java:34)
下面是代碼:我需要生成隨機整數數組與使用二進制和線性遞歸增加其值...
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
class SumArray {
static int floor = 100000;
static int ceil = 0;
int result;
int half;
int half2;
//Linear Recursion
int sum(int a[], int n) {
if (n == 1)
return a[0];
else {
result = sum(a, n - 1);
result = result + a[n - 1];
return result;
}
}
//Binary Recursion
int binarySum(int a[], int i, int n) {
if (n == 1)
return a[0];
return binarySum(a, i, ceil/2) + binarySum(a, i + ceil/2, floor/2);
}
public static void main(String args[]) throws IOException {
//Define ArrayList to hold Integer objects
ArrayList<Integer> numbers = new ArrayList<Integer>();
// User determines number of elements
DataInputStream dis = new DataInputStream(System.in);
System.out.println("Hello! Please enter the size of your array: ");
int n = Integer.parseInt(dis.readLine());
// Generate specified number of random integers
Random randNumGenerator = new Random();
int[] x = new int[n];
// While still less than indicated number.. add more
for (int i = 0; i < x.length; i++) {
x[i] = (randNumGenerator.nextInt(100000));
numbers.add(x[i]);
//calculate min and max values
if(ceil < x[i]) {
ceil = x[i];
}
if(floor > x[i]) {
floor = x[i];
}
}
SumArray a1 = new SumArray();
// Print array values
System.out.println("Array values inlude: " + numbers);
// Print the sum
System.out.println("The sum of the array using Linear Recursion is: " + a1.sum(x, n));
// Print the binary sum
System.out.println("The sum of the array using Binary Recursion is: " + a1.binarySum(x, n, n));
System.out.println("Ceiling: " + ceil);
System.out.println("Floor: " + floor);
}
}
提示:在一些診斷中顯示每個遞歸調用的參數。然後想想'binarySum(什麼,什麼,0)'會做什麼...... –