首页 > 其他 > 详细

整数划分

时间:2020-11-07 19:36:09      阅读:35      评论:0      收藏:0      [点我收藏+]

这个学期开了一门《算法设计与分析》的课程,现在学了递归,讲了一个有关整数划分的例子。

对于各种情况下有着不同的划分,其中

n=1m=1

n<m

n=m

n>m>1(q(n,m) = q(n,m-1) + q(n-m,m))

中前三个都好理解,但是第4个有些不太好理解,我理解了一下,可以认为是q(n,m)先划分q(n,m-1)和将n划分为一定有m的,

所以至少需要一个m,即从n中拿出一个m即固定有一个m,剩下的数就变成了(n-m),再将这剩下的继续划分。

这样就形成了持续的递归。

递归其实最难的就是找到递归的条件,代码其实是比较简单的。

 

#include<stdio.h>

int equationCount(int n, int m)
{
    if(n == 1 || m==1)
        return 1;
    else if(n < m)
        return equationCount(n,n);
    else if(n == m)
        return equationCount(n,n-1) + 1;
    else if(n > m)
        return equationCount(n,m-1) +equationCount(n-m,m);
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        printf("%d\n",equationCount(n,n));
    }
    
       return 0;
}

 

整数划分

原文:https://www.cnblogs.com/xie213/p/13941714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!