递归求n个整数的平均值

int Average(int *arr,int size,int a,int n)
{
if(a>=n)return arr[n];
return (arr[a]+Average(arr,size,a+1,n))/a;
}
怎么改?

#include"stdio.h"

a是数组,n代表该书组元素个数
float aver(int a[],int n)
{
if(n==1)//如果只有一个元素的话
return a[0];//它的平均值就是这个元素
else
return((float)(aver(a,n-1) * (n-1)+a[n-1])) /n;
}

int main()
{
int a[3] = {1, 2, 3};
printf("%f\n", aver(a, 3));
return 0;
}追问

((float)(aver(a,n-1) * (n-1)+a[n-1])) /n;这是什么意思呢?

追答

aver(a, n-1) * (n -1) 这个代表数组 前n-1个数之和。
a[n-1] 代表数组第n-1个数。

两者相加代表,整个数组的和。然后强制转换成浮点性,防止在整除的时候四舍五入。
((float)(aver(a,n-1) * (n-1)+a[n-1]))
将数组的和 除以n 就是平均值。

((float)(aver(a,n-1) * (n-1)+a[n-1])) /n

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-27
我觉得平均值还是用浮点数会精确一点吧
double Average(int *a,int start,int end,int size)
{
if(start >= end)
return (double)a[end] / size;
else
return (double)a[start] / size + Average(a,start+1,end,size);
}追问

(double)a[start] / size + Average(a,start+1,end,size)这是什么意思?

追答

例如现在有三个元素a[0],a[1],a[2],那么这里的start=0,end=2,size=3,平均值的计算表达式为
average=(a[0]+a[1]+a[2])/3=a[0]/3+a[1]/3+a[2]/3
a[start] / size + Average(a,start+1,end,size)的意思就是先计算a[0]/3,再加上后面两个数的平均值

本回答被提问者采纳

递归求n个整数的平均值
if(n==1)\/\/如果只有一个元素的话 return a[0];\/\/它的平均值就是这个元素 else return((float)(aver(a,n-1) * (n-1)+a[n-1])) \/n;} int main(){ int a[3] = {1, 2, 3};printf("%f\\n", aver(a, 3));return 0;} ...

...递归算法,使之能:求数组A中最大整数;求n个整数的和及平均值...
平均值也能递归:Avg(n) = ( Avg(n-1) * (n-1) + A[n-1] ) \/ n

已知A【n】为整数数组,编写一个递归算法求其中n个元素的平均值
include<stdio.h>int a[100],n;float digui(int i){ if(i==-1)return 0; return 1.0\/n*a[i]+digui(n-1);}int main(){ int ans,i; scanf("%d",&n); for(i=0;i<n;i++)scanf("%d",&a[i]); printf("%f",digui(n-1)); return 0;} ...

怎么用递归实现一个数组的平均值计算呢?
printf("个数为%d,平均值为%.2f\\n",len,(sum*1.0)\/len);free(nums);return 0;} int input(int **nsp){ int len=0;int n,*nTemp=NULL,*nums=NULL;if(*nsp) free(*nsp),nsp=NULL;while(1){ scanf("%d",&n);if(n==0) break;if(n>0){ if(nums==NULL)\/\/记录首个数字...

Pascal算法之回溯及递推详细介绍、
用递归的方法完成下列问题1.求数组中的最大数2.1+2+3+...+n3.求n个整数的积4.求n个整数的平均值5.求n个自然数的最大公约数与最小公倍数6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子?7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项. 2.3典型例题例3 梵塔...

free pascal 递归讲解
用递归的方法完成下列问题 1.求数组中的最大数 2.1+2+3+...+n 3.求n个整数的积 4.求n个整数的平均值 5.求n个自然数的最大公约数与最小公倍数 6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子?7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项....

c语言求整数均值怎么编程
。使用指针和动态内存分配,可以根据用户输入的整数个数,动态分配一段内存空间来存储整数,然后使用指针来遍历和计算平均值4 。使用递归和返回值,可以定义一个递归函数来计算一组整数的和与平均值,每次递归调用时返回当前元素的值和剩余元素的和与平均值5 。

c语言用递归方法求n!还有求10个学生成绩的平均值,两个问题?
else if(n==1 || n==0)return 1;else return -1;} int main(int argc,char *argv[]){ long n;printf("Enter n(int n>=0)...\\n");scanf("%d",&n);printf("%d! = %d\\n",n,fac(n));return 0;} 右:代码文本:include "stdio.h"int main(int argc,char *argv[]){ i...

到N个已知点距离和最小的点即为这N个点的平均值点,跪求证明过程。_百 ...
递归证明 证明到两个已知点的距离和最小的点为这两个点的平均指点,利用三角形证明 ,这个过程很简单的 我就不多少了 相信你会。然后证明第三个点和这个平均值点的平均值点 之后套用公式N+1证明题目

...中存储的都是整型数据,试写出实现下列运算的递归算法:
带头不?不带头的:s=i=0;while(f->next!=NULL){ i++;if(i==1)max=f->data;if(f->data>max)max=f->data;s+=f->data;f=f->next;} printf("%d%d%d",max,i,s\/i);

相似回答