|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 求助(这个为什么算出来是1)
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
687
人关注过本帖
标题:
求助(这个为什么算出来是1)
只看楼主
加入收藏
skywalker_
等 级:
新手上路
帖 子: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
举报帖子
使用道具
赠送鲜花
福尔摩斯
等 级:
贵宾
威 望:
12
帖 子:4011
专家分:370
注 册:2006-8-15
第
2
楼
收藏
得分: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
举报帖子
使用道具
赠送鲜花
韦春敢
来 自:广西
等 级:
论坛游侠
帖 子:91
专家分:142
注 册:2010-1-25
第
3
楼
收藏
得分: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_
等 级:
论坛游民
帖 子:81
专家分:28
注 册:2009-3-30
第
4
楼
收藏
得分:0
个人感觉楼上两位说的有点问题,3楼且不说,2楼应该是知道问题所在,不过在细节分析上出现了问题,可能是一点大意吧
不应该是h函数的各个值都相等,而是从1到50 的一个公差为1的等差数列,然后递归返回,算出h(50)=50
所以
所求表达式的值,也就是a在题目中的值,应该是1
扩展一下,思考一下其中的步骤,不难发现,由于表达式的特殊性,h函数的值恒等于1.
当然
我也是个人的看法,有不对的地方还请指正,一定虚心接受。
2010-01-30 23:13
举报帖子
使用道具
赠送鲜花
drhp123
等 级:
新手上路
帖 子:11
专家分:0
注 册:2010-3-1
第
5
楼
收藏
得分:0
我觉得,楼上几位说得各有千秋.但是自己自己认为;a=h(k-1)+1/k造成了多次调用自身函数体,结果是每一次都残生一个以实参为分母以一为分子的小于零的数(二进制码),结果为一和这些码的和,然后根据的类型省去小于一的部分.返回的类型为浮点型,则结果为1.0才对.
2010-03-06 12:27
举报帖子
使用道具
赠送鲜花
lpro
等 级:
新手上路
帖 子:11
专家分:5
注 册:2010-3-6
第
6
楼
收藏
得分:0
e...c++是这样的代码吗?
2010-03-06 13:30
举报帖子
使用道具
赠送鲜花
6
1/1页
1
快速回复:
求助(这个为什么算出来是1)
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.017018 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved