下降阶乘 JAVA
Falling factorial JAVA
所以基本上我需要编写一个计算下降阶乘的方法。 “下降功率 10 5 等于 10 * 9 * 8 * 7 * 6 = 30240"
这是我的第一次尝试:
public static long fallingPower(int n, int k) {
long holder = n;
int counter;
if (n > 0) {
counter = 1;
for (int i = k - 1; i > 0; i--) {
holder = holder * (n - counter);
counter++;
}
}
if (n < 0) {
counter = -1;
for (int i = k - 1; i > 0; i--) {
holder = holder * (n + counter);
counter--;
//System.out.println(holder);
}
}
return holder;
}
它适用于问题上下文中给出的 (10, 5) (-4, 5) 和 (8, 3) 等测试,但未通过实际测试。
经过长时间的 wolfram alfa 阅读和一些谷歌搜索后,这通过了测试:
public static long fallingPower(int n, int k) {
long count, holder;
holder = 1;
for (count = 0; count <= k - 1; count = count + 1) {
holder = holder * (n - count);
}
return holder;
}
我的问题是,在第一种情况下,我到底做错了什么导致了正确的样本测试,但在更大的输入下会导致错误的输出。
非常感谢。
立即引起我注意的一件事是您的代码并没有真正处理 n
为 0 的情况。基本上您的两个 if
语句都被跳过了,所以您 return 0. 然而这对我来说似乎是错误的,因为 0! = 1. 请注意您在网上找到的代码,这已说明。所以用你的代码fallingFactorial(0, 1)
是0,用网上的代码fallingFactorial(0, 1)
是1。
所以基本上我需要编写一个计算下降阶乘的方法。 “下降功率 10 5 等于 10 * 9 * 8 * 7 * 6 = 30240"
这是我的第一次尝试:
public static long fallingPower(int n, int k) {
long holder = n;
int counter;
if (n > 0) {
counter = 1;
for (int i = k - 1; i > 0; i--) {
holder = holder * (n - counter);
counter++;
}
}
if (n < 0) {
counter = -1;
for (int i = k - 1; i > 0; i--) {
holder = holder * (n + counter);
counter--;
//System.out.println(holder);
}
}
return holder;
}
它适用于问题上下文中给出的 (10, 5) (-4, 5) 和 (8, 3) 等测试,但未通过实际测试。
经过长时间的 wolfram alfa 阅读和一些谷歌搜索后,这通过了测试:
public static long fallingPower(int n, int k) {
long count, holder;
holder = 1;
for (count = 0; count <= k - 1; count = count + 1) {
holder = holder * (n - count);
}
return holder;
}
我的问题是,在第一种情况下,我到底做错了什么导致了正确的样本测试,但在更大的输入下会导致错误的输出。
非常感谢。
立即引起我注意的一件事是您的代码并没有真正处理 n
为 0 的情况。基本上您的两个 if
语句都被跳过了,所以您 return 0. 然而这对我来说似乎是错误的,因为 0! = 1. 请注意您在网上找到的代码,这已说明。所以用你的代码fallingFactorial(0, 1)
是0,用网上的代码fallingFactorial(0, 1)
是1。