递归。
当n为奇数,f(n)与f(n-1)相同;
当n为偶数,f(n)分为包括1和不包括1,包括1的拆分数为f(n-1)=f(n-2),不包括1的拆分等于f(n/2)。
可以采用只记录偶数的方式节省空间。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int data[1000005];
int main()
{
int n;
int i;
data[0]=data[1]=1;
for(i=1;i<=500000;i++)
{
data[2*i]=(data[2*i-2]+data[i])%1000000000;
data[2*i+1]=data[2*i];
}
while(~scanf("%d",&n))
{
printf("%d\n",data[n]);
}
return 0;
}