整数のシーケンスが与えられている場合、分割と征服のアプローチを使用してその平均を見つけるにはどうすればよいですか?私は宿題として 'l'から 'r'にわたる、配列Aの平均を見つける方法 "double avg(int [] a、int l、int r)を書く必要がありますが、私はStackOverflowErrorを最初の再帰呼び出し - 2番目の呼び出しではありません! - 私のコードの、私はなぜ理解できないようです。また、私はそれが私に本当の平均を与えないと確信していますが、分割と征服を使ってシーケンスの平均をチェックする方法は見つけられませんでした。ここに私のコードです:分割と征服を使用する整数のシーケンスの平均
public class Average {
public static void main(String[] args) {
int[] A = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int l = 0;
int r = A.length-1;
System.out.println("Average of the array: "+averageCheck(A, l, r));
}
public static double averageCheck(int[] A, int l, int r) {
if (l==r) {
return A[l];
}
// Base Case: if there's just a single element it is the average of the array itself
int mid = (l+r)/2;
double avLeft = 0;
double avRight = 0;
avLeft = A[l]/r + averageCheck(A, l, mid);
avRight = A[mid+1]/r + averageCheck(A, mid+2, r);
double average = ((avLeft*mid) + (avRight * (r-mid))) /r;
return average;
}
}
(未 'StackOverflowError'の原因を)整数のシーケンスの平均値は、長さで割った合計です。最後まで分裂しないでください。特に 'r 'で区切っては意味がありません。 –
2つのヒント:ユニットテストを書くことを検討してください - そのようなコードはそれには完璧です。例外自体については、通常、無限の再帰を作成したことを意味します。意味:あなたのコードには再帰を止める条件がありません**。ですから、ステップ1:変数にprintステートメントを追加したり、デバッガで実行したりしてください。 – GhostCat
@AndyTurner、私はElement/Lenghtの合計がすべての要素に対して行われた平均値であると読んでいたので、それは本当だと思った。今は普通の平均値で試してみますが、それを再帰的に想像することはさらに困難です。 – Monok