**难度等级:中等**
**关键字:字符串 递归 递推**
问题描述:
最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。
不妨设
An=sin(1–sin(2+sin(3–sin(4+…sin(n))…)
Sn=(…(A1+n)A2+n-1)A3+…+2)An+1
FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。
输入格式:
仅有一个数:N<201。
输出格式:
请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入:
3
样例输出:
((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1
代码如下:
import java.util.Scanner;
public class Main {
static void printA(int n, int k)
{
if (n == k)
System.out.print("sin("+ n +")"); //还没到 n时,)就不会添加,即不会闭合:()
else
{
System.out.print("sin(" + n);
System.out.print(n % 2 == 0 ? "+" : "-"); // 这是探索出来的规律,sin(?)里面的偶加奇减
printA(n + 1, k);
System.out.print(")");
}
}
static void printB(int n, int k)
{
if (n != 1) { // 如果 n等于 3,则要赋给 n-1个 ( 以此类推...
System.out.print("(");
printB(n - 1, k); // 递归完成的时候,最左边的 ( 已经完成
System.out.print(")"); // 这里用于添加 sin(1)+n) 中 n右边的 )
}
printA(1, n); // n 已经等于 1的时候,执行此步骤
System.out.print("+" + (k - n));
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 3
printB(n, n + 1); //利用递归
System.out.print("\n"); //输出换行符
}
}
希望能对您有帮助!谢谢。(这道题练习递归,极有好处!测试递推能力的一道题)