求x+2y+3z=n的正整数的解数!该如何解决

求x+2y+3z=n的正整数的解数!
如题。。
怎么办。。。。。。
递推公式是什么?

------解决方案--------------------
给一个o(1)的算法
int f(int n){
if(n<6)
return 0;
int m=(n-3)/3;
int s=3*m/2+1;
return s+1;
}
我一测试过此法正确,效果和5楼的一模一样
------解决方案--------------------
C/C++ code
#include<stdio.h>

int count=0;

void f(int sum,int a[],int i,int list[],int n)

{

if(sum==n)

{
int h;
for(h=0;h<3;h++)

{

printf("%d ",list[h]);

}

printf("\n");

count++;

}

else if(sum>n) return;

else

{
int j;
for(j=i;j<3;j++)

{

sum+=a[j];

list[j]++;

f(sum,a,j,list,n);

list[j]--;

sum-=a[j];

}

}

 

}

void main()

{

int n,sum=0; 
int a[3]={1,2,3},list[3]={0};

scanf("%d",&n);

 
f(sum,a,0,list,n);

printf("\n%d",count);

}