注册 登录
编程论坛 C++教室

求助(这个为什么算出来是1)

skywalker_ 发布于 2010-01-28 01:00, 687 次点击
#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));
}
5 回复
#2
福尔摩斯2010-01-28 09:04
递归

因为 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 编辑 ]
#3
韦春敢2010-01-28 13:16
#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));
}
#4
_DaNciNg_2010-01-30 23:13
个人感觉楼上两位说的有点问题,3楼且不说,2楼应该是知道问题所在,不过在细节分析上出现了问题,可能是一点大意吧
  不应该是h函数的各个值都相等,而是从1到50 的一个公差为1的等差数列,然后递归返回,算出h(50)=50
所以  所求表达式的值,也就是a在题目中的值,应该是1
扩展一下,思考一下其中的步骤,不难发现,由于表达式的特殊性,h函数的值恒等于1.
  当然  我也是个人的看法,有不对的地方还请指正,一定虚心接受。
#5
drhp1232010-03-06 12:27
我觉得,楼上几位说得各有千秋.但是自己自己认为;a=h(k-1)+1/k造成了多次调用自身函数体,结果是每一次都残生一个以实参为分母以一为分子的小于零的数(二进制码),结果为一和这些码的和,然后根据的类型省去小于一的部分.返回的类型为浮点型,则结果为1.0才对.
#6
lpro2010-03-06 13:30
e...c++是这样的代码吗?
1