0

当我为了好玩而查看一堆算法时遇到了一个问题。我解决的算法(在 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)

有人可以帮我吗?谢谢!

4

2 回答 2

1

你已经改变了你的 for 循环。在 Java 中,它以相反的方向运行。在 python 等效项中,您正在运行它 form 0 to N - 2

将您的 for 循环更改为: -

for i in range(min(maximum, N), 0, -1):

确切地说。因为,循环n1.

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

于 2012-11-23T17:54:27.050 回答
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)
于 2012-11-23T17:55:35.520 回答