注册 登录
编程论坛 数据结构与算法

1+1/2-1/3+1/4-1/5+1/6......

wu550399048 发布于 2012-11-23 19:58, 863 次点击
#include<iostream.h>

 float f(int n){
    int m=-1;
    if(n=1) return 1;
    if(n%2==0) return 1.0/n+f(n-1)*m;
    else return (1.0/n)*m+f(n-1);
}
void main (){
    double n;
    cin>>n;
    cout<<f(n);}
结果出不来小数,都是1,帮一下
7 回复
#2
wu5503990482012-11-23 20:01
#include<iostream.h>
class stack{
private:
    double*st;
   
    int msize;
public:int top;
    stack(){
        top=-1;}
    stack(int size){
        msize=size;
        st=new double(msize);
        top=-1;
    }
    void push(double n);
    double pop();
};

void stack::push(double n){
        st[++top]=n;
    }
double stack::pop(){
        if(top==-1)
            return 0;
        else return st[top--];
    }
void main(){
    int n;double m=0;double x;
    cin>>n;
    stack s(n);
    for(int i=n;i>0;i--){
        if(n==1)
            s.push(1);  break;
        if(n%2==0)  s.push(1.0/n);
        else s.push(-1.0/n);
    }
    if(s.top!=-1){
        x=s.pop();
        m=m+x;
        }cout<<m<<endl;
    }
出不来结果,结果是0;看一下实现1+1/2-1/3+1/4-1/5......的非递归算法
#3
寒风中的细雨2012-11-23 20:36
if(n=1) return 1;


if里面的条件
#4
wp2319572012-11-23 20:39
刚写了一个类似的东东

https://bbs.bccn.net/thread-388162-1-1.html
#5
寒风中的细雨2012-11-23 20:45
程序代码:
#include<iostream.h>

 class stack{

 private:
     double*st;
   
    int msize;

 public:
     int top;
     stack(){
         top=-1;
     }
     stack(int size){
         msize=size;
         st=new double[msize];
         top=-1;
     }
     void push(double n);
     double pop();

 };

void stack::push(double n){
         st[++top]=n;
     }

 double stack::pop(){
         if(top==-1)
             return 0;
         else return st[top--];
     }

 void main(){
     int n;double m=0;double x;
     cin>>n;
     stack s(n);
     for(int i=n;i>0;i--){
         if(i==1)
         {
             s.push(1);  break;
         }
         if(i%2==0)  s.push(1.0/i);
         else s.push(-1.0/i);
     }
     while(s.top!=-1){
         x=s.pop();
         m=m+x;
         }
     cout<<m<<endl;
     }

 
#6
寒风中的细雨2012-11-23 20:46
回复 2楼 wu550399048
代码 排版整齐点  不然查问题都麻烦点
#7
wu5503990482012-11-30 20:42
谢谢。。。
#8
wu5503990482012-11-30 21:05
回复 楼主 wu550399048
#include<iostream.h>

 double f(int n){
    int m=-1;
    if(n==1) return 1.0;
    if(n==2) return 1+0.5;
     if((n%2==0)&&(n>2))
        return 1.0/n+f(n-1);
    else return (1.0/n)*(-1.0)+f(n-1);
}
void main (){
    int n;
    cin>>n;
    cout<<f(n);}
这是正确的了
1