上周末公司组织去旅游,在路上一个同事提出了一个小问题,就是怎么找出三个数,使它们的和为13。后来又引申为如何找出m个数,使它们的和为n。下面是使用递归的方法来实现:
其中nBlock为个数,nTotal为总和,nBegin为所需要找的nBlock个数的数字的下限值。
基本思路:先确定第一个数为a,然后再找出nBlock-1个数使它们的和为nTotal-a.
import sys
def test( nBlock, nTotal, nBegin=1):
if nBlock <= 1:
return [[nTotal]]
a = []
for i in range(nBegin, nTotal/nBlock+1):
a.extend( [k+[i] for k in test(nBlock-1, nTotal-i, i)] )
return a
if __name__ == '__main__':
if len(sys.argv) == 3:
print test(int(sys.argv[1]), int(sys.argv[2]))
def test( nBlock, nTotal, nBegin=1):
if nBlock <= 1:
return [[nTotal]]
a = []
for i in range(nBegin, nTotal/nBlock+1):
a.extend( [k+[i] for k in test(nBlock-1, nTotal-i, i)] )
return a
if __name__ == '__main__':
if len(sys.argv) == 3:
print test(int(sys.argv[1]), int(sys.argv[2]))
其中nBlock为个数,nTotal为总和,nBegin为所需要找的nBlock个数的数字的下限值。
基本思路:先确定第一个数为a,然后再找出nBlock-1个数使它们的和为nTotal-a.
本文介绍了一种使用递归方法找出特定数量的整数,使得这些整数的和等于给定数值的问题解决方法。具体实现了寻找m个数使它们的和为n的算法,并提供了Python代码示例。
2828

被折叠的 条评论
为什么被折叠?



