打印可以等于给定数字的所有 3 个连续数字

时间:2021-01-08 13:23:03

标签: python recursion backtracking

我如何编写一个递归回溯函数 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

我很困惑如何递归地编写这个。

1 个答案:

答案 0 :(得分:1)

您当前的函数不是递归的。要使其递归,您基本上必须在 count(n-1, s) 的执行过程中的某处调用 count(n, s)。一种方法是这样的:

  • 如果 n > 1,得到 n-1 的可能解并附加任何仍然满足条件的数字
  • if 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)