哎哟那个嘿


私信TA

用户名:657046415

访问量:5095

签 名:

等  级
排  名 8340
经  验 1237
参赛次数 0
文章发表 13
年  龄 0
在职情况 学生
学  校 肇庆学院
专  业

  自我简介:

题目开始前还是要说一下,这道题目虽然有多种做法,用for循环也能完成任务,但是这道题目的训练主要是

考研我们的“递归”的掌握,所以建议用递归的做法,单你掌握了递归做法时再考虑其他。


解题思路: 其实题目就是数列的求Sn

由题目可知:

对于An有:

A1=sin(1)

A2=sin(1-sin(2))

A3=sin(1-sin(2+sin(3)))

对于Sn有:

S1=A1+1

S2=(A1+2)A2+1

S3=((A1+3)A2+2)A3+1


从上面咱可以看出如果忽略掉“+ -”号An明显存在嵌套

同理Sn忽略掉“+k”k的数值,也可以看做嵌套

所以我们只要在递归时注意一点就行


注意事项: 求An时要注意“+ -”号,Sn时要注意+K k的值

参考代码:

(1)求An 的递归函数:i代表目前递归的深度,n代表你要递归的深度即An的n

void An(int i, int n){ 
    if(i==n) cout<<"sin("<<i<<")";
        else{
            if(i%2){
            cout<<"sin("<<i<<"-";
            An(i+1,n);
            cout<<")";
        }
        else{
            cout<<"sin("<<i<<"+";
            An(i+1,n);
            cout<<")"; 
            }
        
        }
        
    }




(2)求Sn的递归函数:同理i代表当前深度,n代表你要求的深度

void Sn(int i,int n){
    if(n==1){
        An(1,1);
        cout<<"+"<<i;
    }
    else{
        cout << "(";
        Sn(i+1,n-1);
        cout << ")";
        An(1,n); 
        cout << "+" << i;
    }
}

完整代码:对你有用麻烦给个十分,谢谢

#include<iostream>
using namespace std;
void An(int i, int n){ 
    if(i==n) cout<<"sin("<<i<<")";
        else{
            if(i%2){
            cout<<"sin("<<i<<"-";
            An(i+1,n);
            cout<<")";
        }
        else{
            cout<<"sin("<<i<<"+";
            An(i+1,n);
            cout<<")"; 
            }
        
        }
        
    }

void Sn(int i,int n){
    if(n==1){
        An(1,1);
        cout<<"+"<<i;
    }
    else{
        cout << "(";
        Sn(i+1,n-1);
        cout << ")";
        An(1,n); 
        cout << "+" << i;
    }
}

int main(){
int n;
cin >> n;
Sn(1,n);
return 0;
}


 

0.0分

55 人评分

  评论区

  • «
  • »