DFS练习——6=1+2+3

问题:将一个数X拆分成 n 个数,这 n 个数是依次递增的。

求解思路:暴力求解、树深度遍历求解

树的思维:可以将其认为是有n层的树结构(不加根结点),除根结点外,每层有x个结点代表这一层是什么数。

def dfs(depth,last_val,tot):
    #先判断递归的终止条件
    if depth==n:#条件一(大条件)
        if tot==x:#条件二
            print(path)#满足条件就打印
        return #找其他的可能的答案
    #递归主体
    for i in range(last_val,x+1):
        path.append(i)
        dfs(depth+1,i,tot+i)
        #depth+1表示进入下一轮迭代,i作为父节点的值传入下一次迭代,tot+i表示计算和
        path.pop()

x=int(input("输入一个正整数"))
n=int(input("将这个正整数分成n次"))
path=[]#这是一个存储答案的列表,也是路径的存储情况
dfs(0,1,0)#(深度0是根结点,从1开始遍历,计算和为0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值