递归

递归函数: 用函数自身定义的函数

递归算法:直接或间接调用自身的算法

递归典型例子:Fibonacci数列,汉诺塔

eg:

 将正整数 n 表示成一系列正整数之和。 

       n = n1+ n2 +……+ nk

正整数n的不同划分个数称为正整数n的划分数,记作P(n)

   整数划分问题就是求出P(n)。

分析:求 正整数 6 的划分数

    n=6                  n=3+3

    n=5+1                n=3+2+1

    n=4+2                n=3+1+1

    n=4+1+1              …..

P(6) =11

记 q(n,m)为在 n 的所有不同划分中,最大加数不大于m的划分数。

例如: q(6,1)=1      即  6=1+1+1+1+1+1

              q(6,2)=4      即  6=2+2+2

                                6=2+2+1+1

                                6=2+1+1+1+1

                                6=1+1+1+1+1+1

            q(6,6)=11          

  q(n,1)=1              n>=1

 q(n,m)=q(n,n)     m>=n     (最大加数不能大于n)

 q(n,n) = 1+ q(n,n-1)          (n的划分由n1 =n的一种划分

                                                                    和ni <=n-1的划分组成)

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

(n的划分由ni <=m-1的划分

               和 n1=m, 其余加数ni <=m的划分组成

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

  

posted @ 2018-02-24 16:36  风雨长安  阅读(139)  评论(0编辑  收藏  举报
博客