每日刷题(三十七)
BASIC-21、Sine之舞
这个题考查的是递归调用。首先我们从A开始找规律
我们发现如果n是奇数则输出-
n是偶数则输出+
而且n有多大,最右边的右括号数就有多少
接下来我们再找S的规律,结合样例和题意可知,最左边输出n-1个左括号,最右边无括号,且每次都要+n,并且n随着An的复杂度增加而减小
详细C代码如下:
#include<stdio.h>
int N;
void A(int n, int k)
{
int t = N - n + 1; //t不断增加
printf("sin(%d", k);
if(n == 1) //n不断减小到达一个出口
{
printf(")");
return;
}
if(t % 2 == 1)
{
printf("-");
}
else
printf("+");
A(n - 1, t + 1);
printf(")");
}
void S(int n, int k)
{
N = k;
A(k, 1);
if(n == 1)
{
printf("+1");
return;
}
printf("+%d", n);
printf(")");
S(n - 1, k + 1);
}
int main()
{
int n;
scanf("%d", &N);
int i = N;
for(; i > 1; i--)
printf("(");
S(N, 1);
printf("\n");
return 0;
}