一、 请用递归算法求数组中前n个元素的平均值。 提示: 设ave(n)是求n个元素平均值的函数,根据递归算法

,要找出“n个元素的平均值”与“n-1个元素的平均值”之间的关系(即,找出递归公式),显然有ave(n)= (n-1)*ave(n-1)+ a[n-1]/n成立,因为,“n-1个元素的平均值”ave(n-1)乘以(n-1)就是前n个元素之和,它加上a[n-1]就是n个元素之和(注意:数组元素的下标从0开始计数,所以第n个元素是a[n-1])。至于边界条件是:当n等于1时,ave(1)= a[0]。函数原型:float ave(int n)函数功能:用递归方法求前n元素的平均值函数返回:n元素的平均值
这是我的作业,求大师帮忙。(c语言编程)

(不必用递推关系,更高效,严格按照你的函数定义):
#include <stdio.h>

float ave(int n)
{
static int tag=n;
float t;
scanf("%lf",&t);
if(n==1)
return t;
else if(tag!=n)
return t+ave(n-1);
else
return (t+ave(n-1))/n;
}

int main()
{
printf("%f",ave(3));/* 输入三个数 回车,自动计算平均值 */
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-23
用C编写可以吗?
我假设有全局数组 a[] 平均值需要单精度实型的,那么可以有这个函数

float ave(int n)
{
int i;
float s=0;
for(i=1;i<=n;++i) s+=a[i];
s/=n; return s;
}
第2个回答  2011-02-23
#include<stdio.h>

double ave( double* a, int n );

int main( void )
{
double b[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
double m = ave( b, 5 );
printf( "%f\n", m );

system( "pause" );
}

double ave( double* a, int n )
{
if( n == 0 )
{
return 0;
}
else
{
return ( ave( a, n - 1 ) * ( n - 1 ) + a[ n - 1 ] ) / n;
}
}
从0开始算。

C语言数组实验 已知整形数组,设计递归算法实现下列运算:求最大整数...
} else { return a[n - 1] \/ 5.0 + ave(

求:C语言程序设计试卷及答案一份
31.若有定义:int a[3][4];,()不能表示数组元素a[1][1]。(本题分值:1分) 【正确答案】D A.*(a[1]+1) B.*(&a[1][1]) C.(*(a+1))[1] D.*(a+5) 32.若i、j已定义为int型,则以下程序段中内循环体的总的执行次数是()(本题分值:1分) for(i=5;i>0;i--) for(j=0...

输入一个整数数组L和两个整数a、b,求元素值大于a小于b的所有子数组和数...
include <stdio.h>int main(void){int i,j=0,a,b,L[5],l[5];for(i=0;i<5;i++){printf(" 请输入整数数组L[5]的第 %d 个值:",i+1);scanf("%d",&L[i]);}printf(" 请输入整数变量a的值:");scanf("%d",&a);printf(" 请输入整数变量b的值:");scanf("%d",&b...

相似回答