我使用方法a来计算数字10的可能选择数量,数字从 0到6。问题是它只需要太多时间当 x如50 或其他什么时。我只需要一些提示,我应该做些什么来加快速度。
代码
public static int count(int x) {
if (x < 0) {
return 0;
}
if (x == 0) {
return 1;
}
int result = 0;
for (int i = 1; i <= 6; i++) {
result += count(x - i);
}
return result;
}
答案 0 :(得分:3)
这是Fibonacci的一个变体,不过它是最后六个值的总和。
你可以使用一个比记忆更快(第一次)的普通循环
public static long count(int x) {
long a=0, b=0, c=0, d=0, e=0, f=1;
while(x-- > 0) {
long sum = a + b + c + d + e + f;
a = b; b = c; c = d; d = e; e = f;
f = sum;
}
return f;
}
如果你反复调用它,你也可以存储int
范围内的所有值,第一次可能小于30,并在此之后检索这些值。