整数划分问题

什么是整数划分?
将正整数n表示成一系列正整数的和。
例如5的划分:
5
(1) 5;
(2) 4+1;
(3) 3+2 3+1+1;
(4) 2+2+1 2+1+1+1+1;
(5) 1+1+1+1+1;
p(5,4) = 6;
p(5,3) = 5;
p(5,2) = 3;
p(5,1) = 1;
解析:
q(num, m) = 1;
(num=1 or m=1)
q(num,m) = q(num, num); (num<m)
1+ q(num, m-1); (num=m)
q(num-m,m)+q(num,m-1); (num>m)
代码展示

import java.util.*;
import java.util.Scanner;
public class Q
{
    public static void main(String[] args)
    {
        int num,m;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入正整数以及最大划分数");
        num = input.nextInt();
        m = input.nextInt();
        System.out.println(q(num,m));
            
    }
    static int q(int num,int m)
    {
        if( (num < 1) || (m < 1) ) return 0;
        if( num == 1 || m == 1) return 1;
        if(num < m) return q(num,num);
        if( num == m) return q(num,m-1) +1;
        return q(num,m-1)+q(num-m,m);   
    }

}
运行结果截图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前置文章:递归算法:www.jianshu.com/p/703069f3ba3f . 在说到递归算法的时候,逃...
    郎小凯阅读 1,322评论 1 1
  • 整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整...
    Ethan_Walker阅读 1,949评论 0 1
  • 将一个整数划分为多个整数想加的形式,并计算划分方法。例:6的划分:6=5+16=4+26=4+1+16=3+36=...
    rainumdo阅读 916评论 0 1
  • 幕送三分雨,风添一阵凉。 愿君多自顾,还加旧衣裳。 2017.8.31 午间即兴作
    AbbyMa阅读 199评论 2 2
  • 每次身体不舒服,其实都想吃我妈做的饭,曾经偶尔,她也能煮出特别可口的汤羹,令我留恋至今,只是,这些美妙的味道,都是...
    妙鱼头阅读 558评论 3 1