java - 下降阶乘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
语句都被跳过了,所以你返回 0。但是这对我来说似乎是错误的,因为 0!= 1.注意你在网上找到的代码,这是占了。所以你的代码fallingFactorial(0, 1)
是0,网上的代码fallingFactorial(0, 1)
是1。
推荐阅读
- html - 如何在 WordPress 中批量导入文章和图像?
- reactjs - 如何在不使用 Firebase 身份验证的情况下保护 Firebase 存储?(下一个)
- apache-spark - Calico 的网络策略不能选择 kubernetes.default 服务
- php - PHPMailer没有发布
- javascript - JS 我有一个字符串数组,'email:password',这些字符串,我需要把它变成一个分隔这些值的对象
- python - 使用 python py3270 包启动 QWS3270 并抛出错误“WinError 10061:无法进行连接,因为目标机器主动拒绝它”
- php - PHP - 如何知道数组对象中的最新数组?
- python - 使用标签列表创建字典字典
- sql - 如何从同一列中检索两个不同的条件数据集?
- python - 直接在 Airflow DAG 中使用 Python 逻辑是不好的做法吗?