首页 新闻 搜索 专区 学院

我是菜鸟,刚来就有点问题,一个递归的源码问题,望大牛指点迷津,不甚感激!

0
[待解决问题]

float series(int n,float a)
{
    if(n==1)return 1;
    else
    a=1.0/n+series(n-1,a);
    return a;
}

运行验证结果没错,就对a有点不解,其实我根本就没搞清递归实体中的a的传递是怎么变化的,望大牛给小弟指点指点,谢谢!!!

sultan_h的主页 sultan_h | 菜鸟二级 | 园豆:202
提问于:2013-03-18 23:19
< >
分享
所有回答(2)
3

首先这个递归写的有问题,n=0会报错,n<0会无限循环(因为没有跳出点)

其次这个递归跳出点是n=1,既 series(1,a)=1

n>1的时候,会一直执行series(n,a)直到n=1

所以就是计算a=1+1/2+1/3...+1/n的

飞来飞去 | 园豆:2057 (老鸟四级) | 2013-03-18 23:37

嗯嗯嗯……是的,如果n>1,那第一次调用series函数后,执行a=1.0/n+series(n-1,a);最后那个a是什么值???

支持(0) 反对(0) sultan_h | 园豆:202 (菜鸟二级) | 2013-03-19 00:24

@sultan_h: 最后的a就是series函数的第二个参数值,其实没意义。。。你直接写

float series(int n){

  if(n<=1)return 1;

  else return 1/n+series(n-1);

}

就可以了

支持(1) 反对(0) 飞来飞去 | 园豆:2057 (老鸟四级) | 2013-03-19 01:04

@飞来飞去: 噢,谢谢。不过你那1/n应该改成1.0/n,不然输出的是整数,嘿嘿。

支持(0) 反对(0) sultan_h | 园豆:202 (菜鸟二级) | 2013-03-19 19:36

@sultan_h: 嗯。。是我的基础差了。。。

支持(0) 反对(0) 飞来飞去 | 园豆:2057 (老鸟四级) | 2013-03-19 21:06
0

顶楼上的

百品 | 园豆:253 (菜鸟二级) | 2013-03-19 12:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册