示例给的是(sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1
A1=sin(1)
A2=sin(1-sin(2))
A3=sin(1-sin(2+sin(3)))
原式也就是((A1+3)A2+2)A3+1
代码来自于网络,关掉了忘记哪找的了
两个递归,An Sn嵌套顺序不一样,递归顺序当然也不一样
#include <iostream>
#include <cstring>
using namespace std;
/*
Sine之舞
输入格式
仅有一个数:N<201。
输出格式
请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
*/
void An(int i,int n) //从小到大递归 i可看做目前递归次数,n为计算An所需递归次数
{
if(i==n)
cout<<"sin("<<i<<")";
else
{
if(i%2==0)
{
cout<<"sin("<<i<<'+';
An(i+1,n);
cout<<")";
}
else
{
cout<<"sin("<<i<<'-';
An(i+1,n);
cout<<")";
}
}
}
void Sn(int n,int i) //从大到小递归 n是Sn下标,i为表达式中的数字
{
if(n==1)
{
An(1,n); //A1
cout<<'+'<<i; //A1+n
}
else
{
cout<<"(";
Sn(n-1,i+1);
cout<<")";
An(1,n);
cout<<'+'<<i;
}
}
int main()
{
int n;
cin>>n;
Sn(n,1);
return 0;
}