我如何编写一个递归回溯函数 count(N,S)
,它打印所有 N
位数字,使得数字中每 3 个连续数字的总和完全等于 S
其中 N
将小于或等于 10,并且是从 0 到 27。
代码:
def count(S):
n = int(S)
if n % 3 == 0:
print(int(n / 3 - 1),int(n / 3),int(n / 3 + 1))
else:
print(None)
S = 27
count(S)
样本输出:
8 9 10
我很困惑如何递归地编写这个。
答案 0 :(得分:1)
您当前的函数不是递归的。要使其递归,您基本上必须在 count(n-1, s)
的执行过程中的某处调用 count(n, s)
。一种方法是这样的:
n > 1
,得到 n-1
的可能解并附加任何仍然满足条件的数字n == 0
只返回 ""
(如果函数返回字符串,而不是实际的整数会更容易一些)作为一个生成器函数,这看起来有点像这样。当然,您也可以将结果收集到列表中并return
它们,或者只是获取这些数字的计数并返回。
def count(n, s):
if n > 0:
for x in count(n-1, s):
for d in range(10):
y = str(d) + x
if len(y) < 3 or sum(map(int, y[:3])) == s:
yield y
else:
yield ""
for x in count(5, 15):
print(x)