码迷,mamicode.com
首页 > 其他好文 > 详细

整数划分问题 递归版

时间:2015-07-15 22:34:24      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

递归的划分 比较容易理解 但是要time out

若要把n用不大于n的数m划分

总共分四种情况 

1.若n==m  则只有一种 但是要继续递归 所以等于 1+q(n,m-1)

2.若n<m 则不用考虑 无法划分 则 继续使用 q(n,n)

3.若n>m 则有两种情况   1.用m划分 剩余则是n-m  因此等于 q(n-m,m)

             2.用小于m的数继续划分  则是 q(n,m-1)

             3.所以合起来是  q(n-m,m)+q(n,m-1)

4.最后就是递归出口了   最底层肯定是1 

1 if(n==1 ||m==1)
2     return 1;

 

完整代码如下

 1 #include "stdio.h"
 2 int q(int n,int m)
 3 {
 4     if(n==1 ||m==1)
 5         return 1;
 6     if(n<m)
 7         return    q(n,n);
 8     if(n==m)
 9         return 1+q(n,m-1);
10     if(n>m)
11         return q(n-m,m)+q(n,m-1);
12 } 
13 main()
14 {
15     int n;
16     while(scanf("%d",&n)!=EOF)
17     {
18         printf("%d\n",q(n,n));
19     }
20 } 

 

整数划分问题 递归版

标签:

原文地址:http://www.cnblogs.com/threezj/p/4649559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!