当我看到一堆算法以获得乐趣时,我遇到了一个问题。我解决的算法(在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)
有人可以帮帮我吗?谢谢!
答案 0 :(得分:1)
您已更改for循环。在Java中,它以反方向运行。在python等效项中,您运行的是0 to N - 2
。
将您的for循环更改为: -
for i in range(min(maximum, N), 0, -1):
确切地说,确切地说。因为,循环形式为n
到1
。
-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)