下降阶乘 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。