java - 二项式系数数组
问题描述
所以,我已经实现了二项式系数
public static int binomial(int n, int k) {
if (k == 0)
return 1;
else if (k > n - k)
return binomial(n, n - k);
else
return binomial(n - 1, k - 1) * n / k;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Insert n: ");
int n = scan.nextInt();
System.out.println("Insert k: ");
int k = scan.nextInt();
System.out.println("Result: " + binomial(n, k));
}
它有效,但我卡住的地方只是我需要为两个给定数字添加系数数组。所以如果n
是5
和k
是3
。系数数组将显示:1 5 10 10
。有任何想法吗?
解决方案
不要在 for 循环中调用递归代码。这增加了愚蠢的冗余。
将数组作为参数从 main 传递给递归函数。数组在java中通过引用传递。
public static int binomial(int n, int k, int[] coefficient) {
int ret;
if (k == 0) {
ret = 1;
} else if (k > n - k) {
ret = binomial(n, n - k, coefficient);
} else {
ret = binomial(n - 1, k - 1, coefficient) * n / k;
}
coefficient[k] = ret;
return ret;
}
推荐阅读
- database - 如何将 mongo 与 elasticsearch 同步
- javascript - 在 summernote 工具栏中添加一些文本
- elasticsearch - 动态更改弹性搜索查询中的“来自”值
- postgresql - 游标中的循环无法正常工作
- postgresql - 已安装postgis但无法创建扩展:错误:无法打开扩展控制文件~/postgis.control":没有这样的文件或目录
- javascript - JQuery函数在另一个函数之后不起作用
- artificial-intelligence - 对话框流中 fb messenger 的“开始”按钮
- c# - 实体框架中的用户定义表生成不正确的查询
- c# - 将文件分组为 500MB 块
- laravel - 在 laravel 5.7 中将 pdf 文件作为电子邮件附件发送