我在JavaScript中制作了一个算法,并尝试将其转换为Java。我没有太多使用Java的经验,并且在尝试编译此代码时遇到错误,而且我不确切地知道语法有什么问题。我已经完成了一些研究,但也许我在函数调用,递归过程中缺少一些东西。是的,我必须将数字作为字符串返回。
public class Answer {
public static String answer(int l, int r, int n) {
int acc = 0;
for (int k=1; k<=n; k++) {
acc += comb(n-1, k-1) * f(k-1, l-1) * f(n-k, r-1);
}
return acc;
}
public static int f(int n, int l) {
if (n==l) {
return 1;
} else if (n<l) {
return 0;
} else {
int acc = 0;
for (int k=1; k<=n; k++) {
acc += comb(n-1, k-1) * f(k-1, l-1) * fact(n-k);
}
return acc;
}
}
public static int comb(int n, int k){
return fact(n) / (fact(k) * fact(n-k));
}
public static int fact(int n) {
int acc = 1;
for (int i=2; i<=n; i++) {
acc *= i;
}
return acc;
}
}
答案 0 :(得分:0)
编译得很好:javac Answer.java
但错误代码显示:
Answer.java:9: error: incompatible types
return acc;
^
required: String
found: int
当函数指定String作为返回类型时,表示在第9行中我们返回了一个int。
根据您的需要,有两种可能的解决方案,将您的功能更改为:
public static int answer(int l, int r, int n) {
int acc = 0;
for (int k=1; k<=n; k++) {
acc += comb(n-1, k-1) * f(k-1, l-1) * f(n-k, r-1);
}
return acc;
}
或
public static String answer(int l, int r, int n) {
int acc = 0;
for (int k=1; k<=n; k++) {
acc += comb(n-1, k-1) * f(k-1, l-1) * f(n-k, r-1);
}
return String.valueOf(acc);
}