如何统计递归打印数字组合函数的输出行数?
解决方案
方法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
相关产品推荐
相关产品推荐

