递归求 1-1/2+1/3-1/4+...-(1/n)*(-1)n

t9630 2011-03-12 10:04:34
递归求 1-1/2+1/3-1/4+...-(1/n)*(-1)n 为什么输不出结果,请高手指点,谢谢!
代码如下:
#include"stdafx.h"
#include<iostream.h>

float sum(int i,float f,int n);
int main()
{
float sum_n=0.0;
float f=0.0;
int n=0;
cout<<"请输入一个正整数: "<<endl;
cin>>n;
sum_n=sum(1,f,n);
cout<<sum_n<<endl;
return 1;
}
float sum(int i,float f,int n)
{
if(i<n)
sum(i+1,f,n);
if(i%2==0 && n>=1)
{
f+=-(1/i);
sum(1,f,n--);


}
else if(i%2!=0 && n>=1)

{
f+=1/i;
sum(1,f,n--);
}
return f;
}

...全文
1484 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjs100901 2013-03-13
  • 打赏
  • 举报
回复
楼主请结帖。
Athenacle_ 2013-03-13
  • 打赏
  • 举报
回复

#include <stdio.h>

double recu(int n)
{
    if (n == 1)
	return 1;
    else
	return 1/( ( n % 2 == 0? -1.0 : 1.0 ) * n) + recu(n - 1);
}

int main(void)
{
    printf("%lf", recu(2));
    return 0;
}

随手用C写的 尾递归,效率不会很低的。。激进点的优化器可以直接把递归优化成循环
赵4老师 2013-03-13
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
dragonbooker 2011-03-12
  • 打赏
  • 举报
回复
这个问题建议使用迭代:

/* 迭代算法函数 */
float sum_iter(int n)
{
float sum = 0.0;
int i;

for(i=1; i<=n; i++)
{
int sign = 1;
if(i % 2 == 0)
{
sign = -1;
}
sum += 1/(float)i * sign;
}

return sum;
}
zjs100901 2011-03-12
  • 打赏
  • 举报
回复
楼主输入10000试下。我这里是栈溢出。还是改用循环吧。为了改好你的递归函数,我多少脑细胞死掉了啊。
zjs100901 2011-03-12
  • 打赏
  • 举报
回复
没看懂你代码。我改了一下。

float sum(int i,float & f,int n);
int main()
{
float sum_n=0.0;
float f=0.0;
int n=0;
cout<<"请输入一个正整数: "<<endl;
cin>>n;
sum_n=sum(1,f,n);
cout<<sum_n*4<<endl;
return 1;
}

float sum(int i,float & f,int n)
{
if(i%2==0 )
{
f -= 1.0/i;
}
else if(i%2!=0 )
{
f += 1.0/i;
}
if(i<n)
return sum(i+1,f,n);
else
return f;
}
t9630 2011-03-12
  • 打赏
  • 举报
回复
请问哪里出不来了
liutengfeigo 2011-03-12
  • 打赏
  • 举报
回复
递归进去出不来了.
zjs100901 2011-03-12
  • 打赏
  • 举报
回复
可以循环就循环啦,递归的效率不太好。

64,633

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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