【算法设计与分析】 —— 整数划分问题(递归法)

算法题目

在这里插入图片描述
在这里插入图片描述

  • 如果只是给了题目没有示例,那其实相对有一定难度的,这个示例给了我们一个更加可视化的思路,当我们以这样的形式展现出来,会发现其中的规律。

算法分析

针对这个问题:

  • 任何一种算法,我们首先尽可能的建立相应的数学模型,这里的数学模型并不是说需要多么高大上,而是把所需解决的问题转化为数学问题,类似于一种从具体到抽象的过程。

  • 我们根据上面的示例可以发现:比如对整数6进行划分,我们在每次划分时,都分为两个部分,第一个数为一个部分,其余的为第二个部分,从6开始第一部分依次是6,5,4,3,2,1,那么第二部分就是(6-6),(6-5),(6-4),(6-3),(6-2),(6-1)的且不超过相应的第一部分的划分。

具体分析如下:
在这里插入图片描述
在这里插入图片描述

代码实现

#include<stdio.h>
int Divinteger(int n,int m)
{
    if(n==1||m==1)
        return 1;
    else if(n<m)
        return Divinteger(n,n);
    else if(n==m)
        return 1+Divinteger(n,n-1);
    else
        return Divinteger(n,m-1)+Divinteger(n-m,m);
}
int main()
{
    int n,s;   //n表示想要划分的整数 s表示该整数划分的种数

    printf("请输入一个正整数n:\n");
    scanf("%d",&n);

    s=Divinteger(n,n);
    printf("该整数%d一共有%d种划分!\n",n,s);

    return 0;
}

结果示例

  • 示例一
    在这里插入图片描述
  • 示例二
    在这里插入图片描述
  • 示例三
    在这里插入图片描述
原创文章 54 获赞 73 访问量 9530

猜你喜欢

转载自blog.csdn.net/qq_43779149/article/details/106071936
今日推荐