Java中的递归nCr组合

Posted

技术标签:

【中文标题】Java中的递归nCr组合【英文标题】:Recursive nCr Combinations in Java 【发布时间】:2022-01-20 07:43:27 【问题描述】:

我有一个任务是创建两个计算 nCr 的递归方法(在 Java 中)。我写的第一个方法是使用帕斯卡三角形。它有效,帕斯卡三角形非常棒。

但是现在我遇到了一个问题,因为我无法思考/找到任何其他递归解决方案,所以我编写了第二个计算 nCr 的方法。我曾尝试使用/编写一种基于找出阶乘的方法,但是当我使用大数字时,该方法会崩溃。

有人可以给我一些关于其他递归计算 nCr 方法的提示、建议和建议吗?

非常感谢!

【问题讨论】:

您可以使用 (n + 1 over k +1) 是 (n over k) + (n over k +1) 的事实 C++ 怎样解决你的问题? 【参考方案1】:

我可以提供用 C++ 创建的问题的解决方案。

#include <iostream>
#include <cstring>
int dp[100][100];
int choose(int a, int b)

    if(a < b) return 0;
    if(dp[a][b] != -1) return dp[a][b];
    if(b == 0) return 1;
    if(b == 1) return a;
    dp[a][b] = (choose(a - 1, b) + choose(a - 1, b - 1));
    return dp[a][b];

int main()

    memset(dp, -1, sizeof(dp));
    return 0;

【讨论】:

以上是关于Java中的递归nCr组合的主要内容,如果未能解决你的问题,请参考以下文章

递归控制-列出所有组合

如何处理java中的递归Stack Overflows

为什么递归循环中的局部变量被忽略? For循环中的Java递归循环

递推递归组合数,汉诺塔,回文数问题(java)

两个数组的递归组合项(不为空或重复),使用 Java

递归与回溯:python列表组合问题