题目内容:
对于一个正整数n的划分,就是把n变成一系列正整数之和的表达式。注意,分划与顺序无关,例如6=5+1跟6=1+5是
同一种分划。另外,单独这个整数本身也算一种分划。
例如:对于正整数n=5,可以划分为:
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
2+3
1+4
5
输入描述
输入一个正整数n

输出描述
输出n整数划分的总数k

输入样例
5

输出样例
7

1、问题描述和分析 
对于一个正整数n的分化,就是把n表示成一系列正整数之和的表达式。注意,分划与顺序无关,例如6=1+5 和 6=5+1被认为是同一个划分。另外,这个整数n本身也算是一种分化。
分析:
所谓整数划分,是指把一个正整数n写成如下形式: n=m1+m2+...+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,...,mi}为n的一个划分。
如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为f(n,m);
例如但n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};
2、数据结构和算法
该问题是求出n的所有划分个数,即f(n, n)。下面我们考虑求f(n,m)的方法,采用递归法, 根据n和m的关系,考虑以下几种情况:
(1)当n=1时,不论m的值为多少(m>0),只有一种划分即{1};
(2)当m=1时,不论n的值为多少,只有一种划分即n个1,{1,1,1,...,1};
(3)当n=m时,根据划分中是否包含n,可以分为两种情况:
    (a)划分中包含n的情况,只有一个即{n};
    (b)划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有(n-1)划分。
    因此 f(n,n) =1 + f(n,n-1);
(4)当n<m时,由于划分中不可能出现负数,因此就相当于f(n,n);
(5)但n>m时,根据划分中是否包含最大值m,可以分为两种情况:
    (a)划分中包含m的情况,即{m, {x1,x2,...xi}}, 其中{x1,x2,... xi} 的和为n-m,因此这情况下为f(n-m,m);
    (b)划分中不包含m的情况,则划分中所有值都比m小,即n的(m-1)划分,个数为f(n,m-1);
     因此 f(n, m) = f(n-m, m)+f(n,m-1);
  综上所述:

f(n, m)=   1;               (n=1 or m=1)

f(n,m)   =    f(n, n);      (n<m)

1+ f(n, m-1);               (n=m)

f(n-m,m)+f(n,m-1);      (n>m)

递归代码:

#include<iostream>using namespace std;int Divinteger(int n,int m) {if(n == 1||m == 1)return 1;else if(n < m)return Divintege(n,n);else if(n == m)return 1+Divintege(n,n-1);elsereturn Divintege(n,m-1) + Divintege(n-m,m);
}int main(void) {int n;while(scanf("%d",&n) != EOF && (n >= 1)) {printf("%d\n",Divintege(n,n));}return 0;
}

递推公式:

递推就是打表,通过矩阵存下所有的个数,公式和思路与上面的一致,只需要把下面代码中的 i 看成 n ,j 看成 m,然后初始化 i = 0时候所有的值,

递推代码:

#include<stdio.h>  int resolve(int a,int max)
{  if(a == 1||max ==1)  return 1;  if(a == max)  return resolve(a,max-1)+1;  if(a > max)  return resolve(a,max-1)+resolve(a-max,max);  if(a < max)  return resolve(a,a);  else return 0;
}  int main()
{  int n;  int sum;  scanf("%d",&n);  sum = resolve(n,n);  printf("%d",sum);  return 0;
}

(C语言)整数划分问题 递归和递推相关推荐

  1. c语言中用递推法解决渔夫问题,递归、递推 - IT小冰的个人空间 - OSCHINA - 中文开源技术交流社区...

    递归 定义 :定义一个函数时出现调用本函数的成分,称之为递归 直接递归,自己调自己 间接递归,函数p调函数q,q又调用p 尾递归,递归函数中,递归调用语句是最后一句 递归应满足的条件 : 需要解决的问 ...

  2. 贪心、递归、递推以及动态规划算法的分析与对比

    PS:   头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...

  3. 递归与递推 普通排队问题及带约束条件的排队问题 c代码

    先看下题目: 电影院买票排队,票价50,排队的人中携带50元的有20个人,携带100的有10个人,售票处开始时没有余额, 问最多有多少种排队方式使得售票处能够找的开(携带相同数额的人交换位置算一种排队 ...

  4. 【递归与递推】诸侯安置

    [递归与递推]诸侯安置 题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图2-2所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是 ...

  5. 递归与递推 输出斐波拉契数列的前n项 python

    输出斐波拉契数列的前n项 python 递归与递推 文章目录 输出斐波拉契数列的前n项 python 题设 题解 题设 以下数列 0 1 1 2 3 5 8 13 21 - 被称为斐波纳契数列. 这个 ...

  6. 【算法反刍】递归与递推

    对于递归和递推的非常专业的定义和解释在这里就不再copy了,私以为算法的关键是运用和实践,就好比围棋,规则简单但是入门的门槛很高,就算熟练记忆规则也没法下好一盘棋.Likewise,对于算法学习,最关 ...

  7. 斐波那契尾递归函数java_斐波那契数列 递归 尾递归 递推 C++实现

    ==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...

  8. 2.3 基本算法之递归变递推 1188 菲波那契数列(2) python

    http://noi.openjudge.cn/ch0203/1760/ """2.3 基本算法之递归变递推 1188 菲波那契数列(2)--3分 http://ybt. ...

  9. 2.3基本算法之递归变递推 1188 菲波那契数列(2)

    http://noi.openjudge.cn/ch0203/1760/ /* 2.3基本算法之递归变递推 1188 菲波那契数列(2) http://ybt.ssoier.cn:8088/probl ...

最新文章

  1. android调试——教你用dumpsys命令调试
  2. html+not选择器,CSS3属性选择器与(:not)选择器_html/css_WEB-ITnose
  3. 1371. Find the Longest Substring Containing Vowels in Even Counts
  4. 今天学会了如何察看SSDT里面的东西、修改里面的地址
  5. 《途客圈创业记:不疯魔,不成活》一一1.6 申请助跑计划
  6. WPF 右下角弹窗的简单实现
  7. 我妈要把闺蜜介绍给我当女朋友......
  8. [memory]虚拟地址空间分布
  9. UI设计师如何正确打开暗黑模式|实用素材拿走
  10. 如何禁用Web表单字段/输入标签上的浏览器自动完成功能?
  11. MySQL 基础 —— 数据类型、各种变量
  12. MMKV_MMKV—强大的存储工具
  13. c++实现 龙格库塔经典4阶算法
  14. C++模拟手机通信录管理系统
  15. ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash
  16. 树支路总数 = 树节点总数 - 1
  17. 手写简易java消息队列
  18. 192.168.8.1手机登陆_192.168.8.1登录入口上网设置
  19. 玩吃鸡台式计算机配置,玩吃鸡的电脑配置推荐_玩吃鸡的电脑配置最低要多少...
  20. HDU-3635 Dragon Balls

热门文章

  1. Java正则表达式——验证手机号码符合性
  2. Ubuntu18.04——正确安装英伟达(NVIDIA)显卡驱动的一种简便方法
  3. 深度系统linux15.3 32位下载,deepin 15.3|deepin linux 15.3下载|linux deepin 2016下载-游迅网...
  4. 【安卓软件】KMPlayer-一款完美的媒体播放器 可以播放所有格式的字幕和视频
  5. comsol三维多孔结构 泡沫材料 孔隙介质模型
  6. 云安全实现高效预防 未来之路怎么走?
  7. VMware虚拟机与主机之间文件共享配置
  8. Elasticsearch suggest
  9. Java笔试题:顺时针方向输出n*m的矩阵
  10. 物流英语与计算机操作,物流英语与计算机模拟题及正确答案[精选].doc