我有以下方法需要迭代实现:
public int binom(int n, int k) {
if (k < 0 || k > n) {
return 0;
}
if (k == 0 || k == n) {
return 1;
}
return binom(n - 1, k - 1) + binom(n - 1, k);
}
唯一的条件是我必须使用身份:
binom(n, k) = binom(n - 1, k - 1) + binom(n - 1, k)
我最终得到了以下内容:
public int binom(int n, int k) {
if (k < 0 || k > n) {
return 0;
}
if (k == 0 || k == n) {
return 1;
}
int[] previousRow = {1, 1};
for (int i = 2; i < n; i++) {
int[] currentRow = new int[i+1];
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
currentRow[j] = 1;
continue;
}
currentRow[j] = previousRow[j-1] + previousRow[j];
}
previousRow = currentRow;
}
return previousRow[k - 1] + previousRow[k];
}
是否有一种更简单/更明显的方法可以实现这一目标,我错过了?