首页 > 解决方案 > 打印可以等于给定数字的所有 3 个连续数字

问题描述

如何编写一个递归回溯函数count(N,S),在该函数中打印所有N-digit 数字,使得数字中每 3 个连续数字的总和正好等于小于或等于 10 的位置,并且是从 0 到 27 SN

代码:

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

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

标签: pythonrecursionbacktracking

解决方案


您当前的函数不是递归的。为了使其递归,您基本上必须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)

推荐阅读