整数划分问题——递归,dfs求解

本文介绍了一个利用递归和深度优先搜索(DFS)解决整数划分的问题。当给定自然数n(例如n=7)时,可以找到所有小于n的自然数之和的拆分方法。算法分析中强调了递归函数的设计,包括参数选择和如何通过递归枚举拆分。并提示关注作者的博客以获取更多内容。
摘要由CSDN通过智能技术生成

1.问题描述:

给定任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。当n = 7,共有14种拆分方法:
在这里插入图片描述

2.算法分析:

这道题目我们可以想到其实应该用递归来做,而dfs又是可以使用递归求解,我们首先可以在递归函数里进行拆分的枚举,需要拆分的数应该是能够由哪一些数相加,怎样设计递归函数dfs呢,我们应该清楚应该拆分n,比如n为7的时候,我们先拆了1,那么n还剩下6对吧,所以我们设计的dfs递归函数应该包含两个参数,比如,我们现在将n拆成了几,然后我们先拿1先拆再拿2先拆这样子做呢。

void dfs(int s, int t) {
    //s是每一步拆分的数 
	for (int i = num[t - 1]; i <= s; i++) {
   
		if (i < n) {
   	//当前数i要大于等于前1位数,且不超过n 
			num[t] = i;
			s -=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值