| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3149 人关注过本帖
标题:[求助]用递归法调用求一整型数组的平均值 错在哪儿?
只看楼主 加入收藏
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
结帖率:88.89%
收藏
 问题点数:0 回复次数:16 
[求助]用递归法调用求一整型数组的平均值 错在哪儿?

以下是一个用递归法调用求一整型数组的平均值,我没有看懂 return ((float)(n*f(n-1)+a[n])/(n+1));
错在哪儿? 把它放在Turboc2.0中验证,结果错了:f(10)=944.182 。书上说正确的答案是f(10)=4 。请高手指教啊。


#include<stdio.h>
int a[]={0,1,2,3,4,5,6,7,8,9};

float f(int n)
{
if(n==1)
return a[0];
else
return ((float)(n*f(n-1)+a[n])/(n+1));
}

main()
{
int n=10;
printf("f(%d)=%g\n",n,f(n));
getch();
}

搜索更多相关主题的帖子: 整型 平均值 递归 
2007-04-22 17:41
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 

我给你改了一下:
#include<stdio.h>
#include <conio.h>
int a[]={0,1,2,3,4,5,6,7,8,9};

float f(int n)
{
if(n==1)
return (float) a[0];
else
return ((float)(n*f(n-1)+a[n])/(n+1));
}

main()
{
int n=10;
printf("f(%d)=%g\n",n,f(n));
getch();
return 0;
}

结果正确。。。。。


~~我的明天我知道~~
2007-04-22 18:14
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
谢谢,我也试验了,结果正确.是不是把a[0]强制转化为float型啊?
但是我始终看不明白return ((float)(n*f(n-1)+a[n])/(n+1));是怎么样递归的啊?

谢谢了.
2007-04-23 18:05
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
return ((float)(n*f(n-1)+a[n])/(n+1)) 为什么会是n+1呢?
2007-04-28 18:36
洛川
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-4-28
收藏
得分:0 

#include <stdio.h>
int a[]={0,1,2,3,4,5,6,7,8,9};

float f(int n)
{
if(n==0)
return a[0];
else
return ((float)(n*f(n-1)+a[n])/(n+1));
}

main()
{
int n=9;
printf("f(%d)=%g\n",n,f(n));
getch();
}
这样改也可以,错误就在于main 函数里的n=10;
n=10代入函数f中去时返回的return ((float)(10*f(9)+a[10] )/(11));
a[10]没有定义,错误就在这里,我的机子运行的时候打印出来a[10]=10398;是个随机值


2007-04-28 22:06
洛川
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-4-28
收藏
得分:0 
LZ用笔算下吧,1+2+3+4+5+6+7+8+9=45
45/10=4.5

2007-04-28 22:08
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
可是我的机子打印出来是4啊.我主要是对这个递归公式不明白,它到底是怎样递归的啊?
如果说n=9,我就明白了,可是转过头又想,n不是数组的个数吗?个数为10,而n=9,我想这样是不是容易给使用都带来麻烦啊?谢谢了.
2007-04-28 22:30
洛川
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-4-28
收藏
得分:0 
a[n]中的n是数组的下标,下标值不能大于数组个数
ex.
#include <stdio.h>
void main()
{
int a[5]={1,2,3,4,5},i;
for(i=0;i<5;i++)
printf("%2d",a[i]);

getch();
}
红色字体是对数组进行打印,a[5]中的元素为a[0],a[1],a[2],a[3],a[4];
看下书就知道

2007-04-29 10:01
kongyuehen
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-4-6
收藏
得分:0 
函数f(n)就是求数组中从0~n-1个数的平均值,
当n=1时,(属最底层)f(1)=a[0];
当n不等于1时,f(n)= ( (n-1)*f(n-1)+a[n-1] )/n
解释:
    (n-1)*f(n-1)  前n-1个数的平均数乘(n-1) --即前n-1个数之和
  
看一下汉诺塔的例子
2007-04-29 13:15
cotwin
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2006-12-21
收藏
得分:0 

#include<stdio.h>

int a[]={0,1,2,3,4,5,6,7,8,9};

float f(int n)
{
if(n==1)
return (float)a[0];
else
return ((float)((n-1)*f(n-1)+a[n-1])/n);
}

int main(void)
{
int n=10;
printf("f(%d)=%g\n",n,f(n));
return 0;
}

答案是4.5

2007-04-29 14:11
快速回复:[求助]用递归法调用求一整型数组的平均值 错在哪儿?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012516 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved