递归算法之整数划分问题

问题描述

将正整数n表示成一系列正整数之和,
n = n1 + n2 + n3 +…+nk (其中ni为正整数,1<=ni<=n)
举例说明,
n = 4的情况下,共有5种划分情况
4 = 4
4 = 3 + 1
4 = 2 + 2
4 = 2 + 1 + 1
4 = 1 + 1 + 1 + 1
注意:这里的1 + 3 和3 + 1被认为是同一种划分情况。

问题分析

首先引入一个表示方式q(n,m)
它的含义是,在正整数n的划分中,将最大加数不大于m的划分数表示为q(n,m)。
这里根据m的不同取值有以下几种情况出现。

  1. m=1
    q(n,1) = 1,n = n个1相加,只有一种情况。
  2. n> m > 1
    q(n,m) = q(n,m-1) + q(n-m,m)
    q(n-m,m)表示最大加数等于m的情况,q(n,m-1)表示最大加数不大于m-1的情况。
  3. m > n
    q(n,m) = q(n,n)
  4. m = n
    q(n,m) = q(n,n) = 1 + q(n,n-1)

递归代码实现

int 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值