思路:直接递归实现
涉及知识点:递归
import java.util.Scanner;
public class Main {
public static int n; // 使用全局变量保存输入的n,用以后面判断输出层数
public static String An = ""; // 递归函数使用空返回值,故使用全局变量保存字符串An与Sn
public static String Sn = "";
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt(); // 输入n
in.close();
Main.Sn(n); // 调用函数Sn(),生成相应的字符串Sn
System.out.println(Main.Sn); // 输出字符串Sn
}
// 生产An字符串
public static void An(int n) {
if (n <= 1) { // 递归结束点
Main.An += "sin(" + (Main.n - n + 1); // 全局变量n用以判断sin后面所跟的数
} else {
Main.An += "sin(" + (Main.n - n + 1) + ((Main.n - n + 1) % 2 == 0 ? '+' : '-'); // 递归
Main.An(n - 1);
}
Main.An += ")"; // 每级递归')'
}
// 递归生成字符串Sn
public static void Sn(int n) {
Main.An = ""; // 因为Sn字符串内嵌套An,所以每次调用是清空An字符串
if (n <= 1) { // 递归结束点
Main.An(1);
Main.Sn += Main.An + "+" + (Main.n - n + 1);
} else {
Main.Sn += "(";
Main.Sn(n - 1); // 递归调用
Main.Sn += ")";
Main.An(n);
Main.Sn += Main.An + "+" + (Main.n - n + 1); // 本级递归处理
}
}
}
问题描述:
最近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