| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 687 人关注过本帖
标题:求助(这个为什么算出来是1)
只看楼主 加入收藏
skywalker_
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-1-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求助(这个为什么算出来是1)
#include <stdio.h>
float h(int k)
{int a;
if(k==1)
a=1;
else
a=h(k-1)+1/k;
return a;
}
void main()
{printf("%f\n",h(50));
}
2010-01-28 01:00
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:20 
递归

因为 a 是整型变量 int, 且 1/k 小于1不会按照实数计算,所以 小数部分省略去

故 a=h(k-1)+1/k; 的有效部分只有 h(k-1) (当 k > 1 时)

又因为 k = 50, 所以 a = h(50) = h(49) = …… = h(1) = 1

[ 本帖最后由 福尔摩斯 于 2010-1-28 09:31 编辑 ]

自我放逐。。。
2010-01-28 09:04
韦春敢
Rank: 3Rank: 3
来 自:广西
等 级:论坛游侠
帖 子:91
专家分:142
注 册:2010-1-25
收藏
得分:0 
#include <stdio.h>
float h(int k)
{float a;
if(k==1)
a=1;
else
a=h*(k-1)+1/k;
return a;//返回的值要与定义函数的类型相同。如:float h(int k)与float a;
}
void main()
{printf("%f\n",h(50));
}

哈哈
2010-01-28 13:16
_DaNciNg_
Rank: 2
等 级:论坛游民
帖 子:81
专家分:28
注 册:2009-3-30
收藏
得分:0 
个人感觉楼上两位说的有点问题,3楼且不说,2楼应该是知道问题所在,不过在细节分析上出现了问题,可能是一点大意吧
  不应该是h函数的各个值都相等,而是从1到50 的一个公差为1的等差数列,然后递归返回,算出h(50)=50
所以  所求表达式的值,也就是a在题目中的值,应该是1
扩展一下,思考一下其中的步骤,不难发现,由于表达式的特殊性,h函数的值恒等于1.
  当然  我也是个人的看法,有不对的地方还请指正,一定虚心接受。
2010-01-30 23:13
drhp123
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-3-1
收藏
得分:0 
我觉得,楼上几位说得各有千秋.但是自己自己认为;a=h(k-1)+1/k造成了多次调用自身函数体,结果是每一次都残生一个以实参为分母以一为分子的小于零的数(二进制码),结果为一和这些码的和,然后根据的类型省去小于一的部分.返回的类型为浮点型,则结果为1.0才对.
2010-03-06 12:27
lpro
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2010-3-6
收藏
得分:0 
e...c++是这样的代码吗?
2010-03-06 13:30
快速回复:求助(这个为什么算出来是1)
数据加载中...
 
   



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

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