整数划分问题

将一个整数划分为多个整数想加的形式,并计算划分方法。
例:6的划分:
6=5+1
6=4+2
6=4+1+1
6=3+3
6=3+2+1
6=3+1+1+1
6=2+2+2
6=2+2+1+1
6=2+1+1+1+1
6=1+1+1+1+1+1

问题分析

这个问题显然要构造递归关系来解决,碰到这个问题时,我们很容易知道当一个整数被分为都是1时,这时应该已经完成了整个递归的过程。如果你已经发现了这一出口,那我们就开始对划分的方式进行分类。
笔者这里分为两类:

第一类 第二类
6=5+1 6=3+3
6=4+2 6=2+2+2
6=4+1+1
6=3+2+1
6=3+1+1+1
6=2+2+1+1
6=2+1+1+1+1
6=1+1+1+1+1+1

我这里就简单的使用是否含有1作为界限,当然也可以使用别的界限,只不过递归的形式就不同了。给定一个整数N,M是N中不超过N的最大整数。
第一类就可以写成F(N,M-1),第二类写成F(N-M,M),即递归表达式
F(N,M)=F(N,M-1)+F(N-M,M)

public static int divInt(int n,int m){
         if (m == 1) return 1;
         if (n <= m) return 1 + divInt(n, n - 1);
         if (m > 1) return divInt(n, m - 1) + divInt(n - m, m);
        return 0;
    } 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整...
    Ethan_Walker阅读 1,973评论 0 1
  • 前置文章:递归算法:www.jianshu.com/p/703069f3ba3f . 在说到递归算法的时候,逃...
    郎小凯阅读 1,330评论 1 1
  • 我曾经问一些年纪比我大的网友,以及一些哲学人问一个问题:如果有群人针对你,而且这种事情还会扩大影响更多的人,而且无...
    空心二胡阅读 799评论 1 2
  • 4月2日,我听了马云在IT领袖峰会上的演讲,讲的干货很多,但印象最深刻的还是两点: 【1】未来30年,属于用好互联...
    484bd019c88a阅读 276评论 0 0
  • 亲侄无聊,甲便带他去同住一小区的乙家做客。乙家有个男孩,与之岁数相当,想该与亲侄玩得到一块。 上门拜访时,乙开门侧...
    筝缓弦歌阅读 225评论 0 0