当前位置: 首页 > 知识库问答 >
问题:

函数查找使用最多m个部分拆分n个对象的方法的数量

幸弘光
2023-03-14

我正在使用递归来解决这个问题。从纸面上看,我的答案应该是可行的,所以我把代码弄错了。然而,我不知道问题出在哪里。

public class Partition {
    public static void main(String[] args) {
        System.out.println(part(6,4));
    }

    public static int part(int n, int m) {
        if (n==0) {
            return 1;
        }
        else if(m == 0 || n<0) {
            return 0;
        }
        else {
            return part(n-m, m) + part(n, m);
        }
    }
}

共有2个答案

吕翰飞
2023-03-14

我不确定你想做什么,但如果要计算组合,应该如下所示:

public static int part(int n, int m) {
    if(m>n) { //This prevent a wrong input from the user
        return part(m, n);
    } else if (m==0 || m==n) { //This is your base case
        return 1;
    } else if(m < 0 || n<0) { //this should not happened, but you never know
        return 0;
    }  else { //this is where you're making mistake(s)
        //I don't know if I'm using the formula you are looking for
        //But if not, make sure yours do not use part(n, m) otherwise it will run forever
        return part(n-1, m) + part(n-1, m-1);
    }
}
符献
2023-03-14

您只需减少m,问题就会返回9,如您所示。

public static int part (int n, int m) {
    if (n == 0) {
        return 1;
    } else if (m == 0 || n < 0) {
        return 0;
    } else {
        return part(n - m, m--) + part(n, m);
    }
}
 类似资料:
  • 问题内容: 想象一下,我有一个这样的JS数组: 我想要的是将该数组拆分为N个较小的数组。例如: 对于Python,我有这个: 对于JS,我可以提出的最佳解决方案是递归函数,但我不喜欢它,因为它既复杂又丑陋。这个内部函数返回一个像这样的数组[1,2,3,null,4,5,6,null,7,8],然后我必须再次循环并手动拆分它。(我的第一次尝试是返回此:[1、2、3,[4、5、6,[7、8、9]]],

  • 本文向大家介绍用Python实现一个二分查找的函数。相关面试题,主要包含被问及用Python实现一个二分查找的函数。时的应答技巧和注意事项,需要的朋友参考一下 二分查找算法:简单的说,就是将一个列表先排序好,比如按照从小到大的顺序排列好,当给定一个数据,比如3,查找3在列表中的位置时,可以先找到列表中间的数li[middle]和3进行比较,当它比3小时,那么3一定是在列表的右边,反之,则3在列表的

  • 我正在尝试拆分ArrayList中的每个对象,因为很多行都包含逗号(“,”)。每个对象都包含一个项和值(但并非所有对象都包含值): 这是我的一段代码: “CE”是主要的ArrayList 我的一段代码只使用逗号将其拆分为同一个ArrayList,另一个问题是如何查看没有“值”的对象并将空值添加到ArrayList。 谢谢各位。

  • 我想在拆分函数调用中使用空格作为分隔符,但我想在单个单元格数组中输入某些单词;例如。 例如: 在带有一些分隔符的函数拆分调用之后,输出应如下所示: 我需要找到一个分隔符(或正则表达式模式)用于split函数。我如何着手做那件事?

  • IntStream可能是最简单的方法,但我只能获取最小的M数字,如下所示: 顺便说一句,考虑算法复杂性并假设N 我认为最好的复杂性可能达到O(N log(M)),但我不知道Java 8是否有这种流方法或收集器。

  • 在分析一位同事几年前的Java 7代码时,我发现他实现了一个遍历数据的实用程序,可能是并行的。他称之为< code>Range,它扩展了< code>Iterator接口。它的一些新方法令人尴尬的熟悉: 将给出范围的确切大小; 将范围分成2个部分,最好,但不一定,大小相似(修改当前范围并创建一个新范围); 会将范围分成 N 个子范围,可能试图使它们尽可能均匀。 尽管 来自 ,但它的子类型只是抛出了