半数集1 long a[1000]; long comp(int n); //(2) 改进的算法,用数组存储已经计算过的结果,避免重复计算 int main() { int n; while (cin>>n)//^Z的效果 { memset(a,sizeof(a),0);//清零了??? a[1]=1; cout<<comp(n)<<endl; } return 0; } long comp(int n) { long ans=1; if(a[n]>0) return (a[n]); else for( int i=1;i<=n/2;i++) ans+=comp(i); a[n]=ans;//注意 return ans; }