#include <stdio.h>
#include <math.h>
double getMean(double a[], int n)
{
if (n == 1) //递归结束
{
return a[n-1];
//或者:return a[0];
}
else //递归体
{
return (a[n - 1] + getMean(a, n - 1) * (n - 1)) / n;
}
}
int main(int argc, char const *argv[])
{
double a[] = {1, 2, 4, 4, 5};
printf("平均:%f", getMean(a, 5));
return 0;
}
难点在return (a[n - 1] + getMean(a, n - 1) * (n - 1)) / n;
,其实用数学推一下就可以理解。
- 解释:
返回 第(n个数 + 第1次到第n-1次的和 * n-1次 )/n - 技巧:第n次就是,把n和n-1整合到一起,如果是求和,则直接相加。但是要就平均,所以要理解第n次要做什么,以及a[n-1]和getMean(a, n - 1)的含义。
- 第n次要做什么?把第n次的值和前n-1次的整合结果整合
- a[n-1]?第n次的值
- getMean(a,n-1);?前n-1次的整合结果