我正在寻找一种更短的(可能是递归的)方式来编写以下内容:
for x1 in range(10):
for x2 in range(10 - x1):
for x3 in range(10 - (x1 + x2)):
for x4 in range(10 - (x1 + x2 + x3)):
print(x1,x2,x3,x4)发布于 2021-09-20 20:30:35
你想要的是过滤过的产品。为此使用itertools,不需要递归。
from itertools import product
n=10
for x1, x2, x3, x4 in filter(lambda x: sum(x) < n, product(range(n), repeat=4)):
print(x1, x2, x3, x4)输出:
0 0 0 0
0 0 0 1
0 0 0 2
0 0 0 3
0 0 0 4
0 0 0 5
0 0 0 6
0 0 0 7
0 0 0 8
0 0 0 9
0 0 1 0
...
9 0 0 0发布于 2021-09-20 20:17:23
以下是一些让你前进的提示,然后如果你陷入困境,你可以问更多有针对性的问题:为了找到一个递归的公式,首先给出你想要达到的目标的高级描述,然后看看你是否能识别问题的递归性质。要做到这一点,您可能需要概括您的问题。
因此,让我以具体的形式对你的问题进行高层次的描述:
“打印出所有4元组的非负数,使它们的和为4。”
我会把它概括为
“打印出所有非负数的n元组,使它们的和为k。”
现在,如果您可以递归地解决该任务,请尝试。
https://stackoverflow.com/questions/69260276
复制相似问题