An和Sn都用遞歸的思路求解會好了解一些
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();
System.out.println(getSn(n, n));
}
private static String getSn(int curr, int n){
if(curr == 1)
return String.format("%s+%d", getAn(1), n);
return String.format("(%s)%s+%d", getSn(curr - 1, n), getAn(curr), n - curr + 1);
}
private static String getAn(int n){
if(n == 1)
return "sin(1)";
StringBuilder sbResult = new StringBuilder(getAn(n - 1));
for(int i = 0; i < n - 1; i++){
sbResult.deleteCharAt(sbResult.length() - 1);
}
sbResult.append((n % 2 == 0 ? "-" : "+") + "sin(" + n + ")");
for(int i = 0; i < n - 1; i++){
sbResult.append(")");
}
return sbResult.toString();
}
}