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

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

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;
}