问题描述 请用Python实现一段程序,可以对一个整数k进行拆分,得到所有由1到k的整数相加的形式。下面举例说明了4的几种拆法,相同的数,顺序不同,看作同一形式,如4=1+2+1就与4=1
问题描述
请用Python实现一段程序,可以对一个整数k进行拆分,得到所有由1到k的整数相加的形式。下面举例说明了4的几种拆法,相同的数,顺序不同,看作同一形式,如4=1+2+1就与4=1+1+2相同。
4=1+1+1+1
4=1+1+2
4=1+3
4=2+2
4=4
感受
第一次用python写了个递归,居然入了深拷贝和浅拷贝的坑,python代码是简洁,也比较容易犯错了,看来基础还是需要的。
代码
import copyimport operator
def solve(n,sum,list_res):
if(sum>n):
return
if(sum==n):
list_res.sort()
# print(list_res)
b=list_res
flag=True
for item in result:
if(item==list_res):
flag=False
break
if(flag):
result.append(copy.deepcopy(list_res))
# print(result)
# print(list_res)
# print(result)
for i in range(1,n+1):
list_res.append(i)
solve(n,sum+i,list_res)
list_res.pop()
return result
if __name__ == "__main__":
val=input("please input: ")
# print(val)
result=[]
list_res=[]
result=solve(val,0,list_res)
for item in result:
print(item)