You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计递归打印数字组合函数的输出行数?

解决方案

方法1:用全局变量统计组合数

在函数外定义计数器,每次找到有效组合时递增,最后输出总数。修改后代码如下:

count = 0

def box_extraction(vec, index, target, reducedNum):
    global count
    if reducedNum < 0:
        return
    if reducedNum == 0:
        count += 1
        # 保留原输出逻辑
        for i in range(index):
            print(vec[i], end=" ")
        print("")
        return
    prev = 1 if index == 0 else vec[index - 1]
    for k in [2,3,4]:
        vec[index] = k
        box_extraction(vec, index + 1, target, reducedNum - k)

def findSums(n):
    global count
    count = 0
    vector = [0] * n
    box_extraction(vector, 0, n, n)
    print(f"组合总数:{count}")
 
n = 8
findSums(n)

方法2:通过递归返回值统计(无全局变量)

这种方式避免全局变量,利用递归调用的返回值累加计数,更符合编程规范:

def box_extraction(vec, index, target, reducedNum):
    if reducedNum < 0:
        return 0
    if reducedNum == 0:
        # 输出组合
        for i in range(index):
            print(vec[i], end=" ")
        print("")
        return 1
    total = 0
    prev = 1 if index == 0 else vec[index - 1]
    for k in [2,3,4]:
        vec[index] = k
        total += box_extraction(vec, index + 1, target, reducedNum - k)
    return total

def findSums(n):
    vector = [0] * n
    total_count = box_extraction(vector, 0, n, n)
    print(f"组合总数:{total_count}")
 
n = 8
findSums(n)

补充说明

  • 方法1适合快速修改,全局变量直观但在复杂场景下可能有副作用;
  • 方法2更优雅,通过返回值传递计数,没有全局变量的问题;
  • 若只需统计数量无需输出组合,可直接删除所有print语句,提升运行效率。

内容的提问来源于stack exchange,提问作者Mario Fernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:25:23