懒得打题目了,这是结合搜索然后自己写出来的,因为发现搜索的有问题,所以改进了,主要的注释在代码里,有什么不明白的可以留言交流。
package LanQiao.jichu;
import java.util.Scanner;
//Sine之舞
public class BASIC_21 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
System.out.println(Sn(1,N));
}
//递推
public static String An(int prev, int n) {
//设置一个标志位用来作为终止条件,方法名中的prev一直为1
if (prev == n) {
return "sin(" + n + ")";
} else {
//以sin(+/-作为一次断点,奇数为-,偶数为+。
if (prev % 2 != 0) {
//这里能用++是因为要先打印的prev先于递归
return "sin(" + prev + "-" + An(++prev, n) + ")";
} else {
return "sin(" + prev + "+" + An(++prev, n) + ")";
}
}
}
//递归
public static String Sn(int prev, int n) {
if (n==1) {
return An(1, 1) + "+" + prev;
}
//这里prev不能用++是因为要保持后边的prev不会在此轮递归发生变化
return "(" + Sn(prev+1,n-1) + ")" + An(1, n) + "+" + prev;
}
}