#include <stdio.h>
// 再帰関数
// □引数
// org_count ... 入力全体の個数。平均計算に使用。不変
// count ... 残りの入力数。呼び出し毎に1減らすことで再帰処理を制御する
// total ... 入力された値の合計。平均計算に使用。呼び出し毎に加算する。
// average ... 平均値の取り出し用
// disp_total ... 偏差の集計用。tempo変数と同じ役割。
void calc(const int org_count, int count, double total, double *average, double *disp_total)
{
double value;
if (count == 0) {
*average = total / (double)org_count;
return;
}
calc(org_count, count-1, total + value, average, disp_total);
*disp_total += (value - *average)*(value - *average);
}
//
// □引数
// count ... 入力したい数。
// average ... 平均値を取り出す。
// dispersion ... 分散を取り出す。
//
// □備考
// 呼び出しやすいように整形した関数のエントリポイントです
// 初期化処理や必要な変数を確保しています
void CalculateAverageAndDispersion(int count, double *average, double *dispersion)
{
double t = 0.0;
double a = 0.0;
if (count > 0) calc(count, count, 0.0, &a, &t);
if (average) *average = a;
if (dispersion) *dispersion = t / (double)count;
}
int main(void) {
int count;
double average, dispersion;
printf("input number of data:");
CalculateAverageAndDispersion(count, &average, &dispersion);
printf("ave : %lf\n", average
); printf("dis : %5.3lf", dispersion
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyDlho3luLDplqLmlbAKLy8g4pah5byV5pWwCi8vICBvcmdfY291bnQgLi4uIOWFpeWKm+WFqOS9k+OBruWAi+aVsOOAguW5s+Wdh+ioiOeul+OBq+S9v+eUqOOAguS4jeWkiQovLyAgY291bnQgLi4uIOaui+OCiuOBruWFpeWKm+aVsOOAguWRvOOBs+WHuuOBl+avjuOBq++8kea4m+OCieOBmeOBk+OBqOOBp+WGjeW4sOWHpueQhuOCkuWItuW+oeOBmeOCiwovLyAgdG90YWwgLi4uIOWFpeWKm+OBleOCjOOBn+WApOOBruWQiOioiOOAguW5s+Wdh+ioiOeul+OBq+S9v+eUqOOAguWRvOOBs+WHuuOBl+avjuOBq+WKoOeul+OBmeOCi+OAggovLyAgYXZlcmFnZSAuLi4g5bmz5Z2H5YCk44Gu5Y+W44KK5Ye644GX55SoCi8vICBkaXNwX3RvdGFsIC4uLiDlgY/lt67jga7pm4boqIjnlKjjgIJ0ZW1wb+WkieaVsOOBqOWQjOOBmOW9ueWJsuOAggp2b2lkIGNhbGMoY29uc3QgaW50IG9yZ19jb3VudCwgaW50IGNvdW50LCBkb3VibGUgdG90YWwsIGRvdWJsZSAqYXZlcmFnZSwgZG91YmxlICpkaXNwX3RvdGFsKQp7CiAgICBkb3VibGUgdmFsdWU7CgkKICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgKmF2ZXJhZ2UgPSB0b3RhbCAvIChkb3VibGUpb3JnX2NvdW50OwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgc2NhbmYoIiVsZiIsICZ2YWx1ZSk7CiAgICBjYWxjKG9yZ19jb3VudCwgY291bnQtMSwgdG90YWwgKyB2YWx1ZSwgYXZlcmFnZSwgZGlzcF90b3RhbCk7CiAgICAKICAgICpkaXNwX3RvdGFsICs9ICh2YWx1ZSAtICphdmVyYWdlKSoodmFsdWUgLSAqYXZlcmFnZSk7Cn0KCi8vIAovLyDilqHlvJXmlbAKLy8gIGNvdW50IC4uLiDlhaXlipvjgZfjgZ/jgYTmlbDjgIIKLy8gIGF2ZXJhZ2UgLi4uIOW5s+Wdh+WApOOCkuWPluOCiuWHuuOBmeOAggovLyAgZGlzcGVyc2lvbiAuLi4g5YiG5pWj44KS5Y+W44KK5Ye644GZ44CCCi8vCi8vIOKWoeWCmeiAgwovLyAg5ZG844Gz5Ye644GX44KE44GZ44GE44KI44GG44Gr5pW05b2i44GX44Gf6Zai5pWw44Gu44Ko44Oz44OI44Oq44Od44Kk44Oz44OI44Gn44GZCi8vICDliJ3mnJ/ljJblh6bnkIbjgoTlv4XopoHjgarlpInmlbDjgpLnorrkv53jgZfjgabjgYTjgb7jgZkKdm9pZCBDYWxjdWxhdGVBdmVyYWdlQW5kRGlzcGVyc2lvbihpbnQgY291bnQsIGRvdWJsZSAqYXZlcmFnZSwgZG91YmxlICpkaXNwZXJzaW9uKQp7CiAgICBkb3VibGUgdCA9IDAuMDsKICAgIGRvdWJsZSBhID0gMC4wOwoKICAgIGlmIChjb3VudCA+IDApIGNhbGMoY291bnQsIGNvdW50LCAwLjAsICZhLCAmdCk7CgogICAgaWYgKGF2ZXJhZ2UpICphdmVyYWdlID0gYTsKICAgIGlmIChkaXNwZXJzaW9uKSAqZGlzcGVyc2lvbiA9IHQgLyAoZG91YmxlKWNvdW50Owp9CgoKaW50IG1haW4odm9pZCkgewogICAgaW50IGNvdW50OwogICAgZG91YmxlIGF2ZXJhZ2UsIGRpc3BlcnNpb247CgkKICAgIHByaW50ZigiaW5wdXQgbnVtYmVyIG9mIGRhdGE6Iik7CiAgICBzY2FuZigiJWQiLCAmY291bnQpOwogICAgCiAgICBwcmludGYoIlxuIik7CgkKICAgIENhbGN1bGF0ZUF2ZXJhZ2VBbmREaXNwZXJzaW9uKGNvdW50LCAmYXZlcmFnZSwgJmRpc3BlcnNpb24pOwoJCiAgICBwcmludGYoImF2ZSA6ICVsZlxuIiwgYXZlcmFnZSk7CiAgICBwcmludGYoImRpcyA6ICU1LjNsZiIsIGRpc3BlcnNpb24pOwoKICAgIHJldHVybiAwOwp9