Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 正整数划分问题(递归算法)
【标  题】:正整数划分问题(递归算法)
【关键字】:
【来  源】:http://www.cublog.cn/u/15909/showart.php?id=98906

正整数划分问题(递归算法)

Your Ad Here
问题:将以正整数n表示成一系列正整数之和.
         n=n1+n2+n3+...+nk (n1>=n2>=n3>=nk>=1, k>=1)
这就是正整数n的一个划分,正整数n不同的划分个数称为正整数n的划分数, 记作p(n)

例如:6 有如下11种划分则p(6)=11
6;
5+1;
4+2, 4+1+1;
3+3, 3+2+1, 3+1+1+1;
2+2+2, 2+2+1+1, 2+1+1+1+1;
1+1+1+1+1+1;

则求任意正整数的划分数p(n).
 
解决:在所有划分中,将最大加数n1不大于m的划分个数记作q(n, m).
so we have this relation:
(1) q(n, 1) = 1, n>=1
最大加数不大于1,则只有一种划分,n=1+1+1+...+1
(2) q(n, m) = q(n, n), m>=n
m larger n is impossinle. so q(1, m)==1
(3) q(n, n) = 1 + q(n, n-1)
n1=n and n1<=n-1
(4) q(n, m) = q(n, m-1) + q(n-m, m), n>m>1
n1=m and n1<=m-1
 
so the program is :
int q(int n, int m)
{
    if((n<1) || (m<1))  return 0;
    if((n==1)|| (m==1)) return 1;
    if(n<m)             returnq(n, n);
    if(n==m)            return(q(n, m-1)+1);
    if(n>m)             return(q(n,m-1) + q(n-m, m));
}
C语言:陷阱和缺陷(转载):【上一篇】
使用 GLib 工具集管理 C 数据:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • CIW认证的好处
  • 基于路由器网络诊断步骤和故障排除技巧
  • 基于CMPP2及东软API短信平台的开
  • Maybe SQL-Server 2005 的一个Bug
  • 【分享】11月10日 精品软件更新
  • 清除物理卷上的引导记录
  • 邮件发送退信分析大全
  • Servlet、Jsp中的多国语言显示
  • How to linux NFS
  • 最小的操作系统[只有9行代码]
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.