小白递归函数,蒙圈了,求救

Smile_Couson 2014-12-24 05:44:37

#include "stdafx.h"
#include<iostream>
using namespace std;

double sum=0;
int FenZi=1;
int FenMu=0;

double FenShuLianJia(int n)
{
if(n>0)
{
FenMu=FenMu+1;
FenZi=FenMu+1;

sum+=FenZi/FenMu;

return FenShuLianJia(n-1);
}
else
{
return sum;
}
}

int main()
{
int CiShu=0;
cin>>CiShu;
cout<<FenShuLianJia(CiShu)<<endl;

return 0;
}





就是这样的程序,希望实现2/1+3/2+4/3+5/4。。。的效果,但是为啥递归函数调用之后,只能得出2,3,4,5的结果呢?
新人小白,真心求教。
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
draculamx 2014-12-25
  • 打赏
  • 举报
回复
整数类型做除法,结果只会是整数啊。。。把你的 FenZi,FenMu,换成float或者double类型
赵4老师 2014-12-25
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
ixshells 2014-12-25
  • 打赏
  • 举报
回复
引用 6 楼 ixshells 的回复:
#include "stdafx.h"
#include<iostream>
using namespace std;
 
double sum=0;
int FenZi=1;
int FenMu=0;
 
double FenShuLianJia(int n)
{
    if(n>0)
    {
        FenMu=FenMu+1;
        FenZi=FenMu+1;
         
        sum+=FenZi/FenMu;
         
        return FenShuLianJia(n-1);
    }
    else
    {
        return sum;
    }
}
 
int main()
{
    int CiShu=0;
    cin>>CiShu;
    cout<<FenShuLianJia(CiShu)<<endl;
 
    return 0;
}
首先第一个错误: 你的分子和分母是同一个数,我已经用红色给你标记,所以分数除下来每次都是1,所以加起来自然等于1,2,3,4,5 第二个错误, 你这里的 sum+=FenZi/FenMu; 中,分子和分母都是整数,除下来之后会默认转为小数,所以,改为 sum+=(double)FenZi/FenMu; 改了这两点,你的程序就没问题了
这里标记成代码后,红色部分就没有了,就是说的第一点: FenMu=FenMu+1; FenZi=FenMu+1; 这里分子和分母是相等的,可能是你写错了
ixshells 2014-12-25
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include<iostream>
using namespace std;
 
double sum=0;
int FenZi=1;
int FenMu=0;
 
double FenShuLianJia(int n)
{
    if(n>0)
    {
        FenMu=FenMu+1;
        FenZi=FenMu+1;
         
        sum+=FenZi/FenMu;
         
        return FenShuLianJia(n-1);
    }
    else
    {
        return sum;
    }
}
 
int main()
{
    int CiShu=0;
    cin>>CiShu;
    cout<<FenShuLianJia(CiShu)<<endl;
 
    return 0;
}
首先第一个错误: 你的分子和分母是同一个数,我已经用红色给你标记,所以分数除下来每次都是1,所以加起来自然等于1,2,3,4,5 第二个错误, 你这里的 sum+=FenZi/FenMu; 中,分子和分母都是整数,除下来之后会默认转为小数,所以,改为 sum+=(double)FenZi/FenMu; 改了这两点,你的程序就没问题了
Groves_Lin 2014-12-25
  • 打赏
  • 举报
回复
除了sum,其他变量你都定义为整型了
FightForProgrammer 2014-12-24
  • 打赏
  • 举报
回复
sum+=(double)FenZi/FenMu;
Saleayas 2014-12-24
  • 打赏
  • 举报
回复
整数除法和浮点数除法不一致。整数除法的结果还是整数。
int i= 1;
int j = 2;
int k = i / j;
//k == 0

float f = (float)i / j;
//f == 0.5

使用后面那个。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧