整数分区Algo - 从Java转换为Python

时间:2012-11-23 17:51:34

标签: python int

当我看到一堆算法以获得乐趣时,我遇到了一个问题。我解决的算法(在Java中)要求我列出整数的所有分区。因此,4的分区应该接收以下打印输出:

4,3 + 1,2 + 2,2 + 1 + 1,1 + 1 + 1 + 1

这是我在Java中的代码:

 public static void partition(int n) {
        partition(n, n, "");
    }
    public static void partition(int n, int max, String prefix) {
        if (n == 0) {
            StdOut.println(prefix);
            return;
        }

        for (int i = Math.min(max, n); i >= 1; i--) {
            partition(n-i, i, prefix + " " + i);
        }
    }

然而,当我尝试将我的Java代码转换为Python时,我得到“递归深度超过”错误。这是:

def partition_rec(N):
    def part(N,maximum = N, prefix = ""):
        if(N==0):
            print(prefix)
            return
        for i in range(N-1):
           part(N-i,i,prefix + " " + str(i))
    return part(N)

有人可以帮帮我吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您已更改for循环。在Java中,它以反方向运行。在python等效项中,您运行的是0 to N - 2

将您的for循环更改为: -

for i in range(min(maximum, N), 0, -1):
确切地说,确切地说。因为,循环形式为n1

-1是步长值,它反向运行范围。

答案 1 :(得分:0)

当我更改代码以匹配Java版本时,它适用于我:

def partition_rec(N):
    def part(N,maximum = N, prefix = ""):
        if(N==0):
            print(prefix)
            return
        for i in range(min(maximum, N), 0, -1): # changed this line
           part(N-i,i,prefix + " " + str(i))
    return part(N)

partition_rec(4)