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

Print all the 3 consecutive digits that can be equal to a given number

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

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

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

  • 如果 n > 1,获取 n-1 的可能解决方案并追加仍然满足条件
  • 的任何数字
  • if n == 0 just return ""(如果函数 return 是字符串,而不是实际整数会更容易一些)

作为生成器函数,它看起来有点像这样。当然,您也可以将结果收集在列表中并 return 它们,或者只计算这些数字的数量并 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)