递归优化: int fei(int n){ if(n<2) return 1; return fei(n-1)+fei(n-2); } //时间复杂度:O(2^n) //记忆化:求过的就直接用 int nz[1000000]={1,1}; int fei(int n){ if(nz[n]!=0) return nz[n]; if(n<2) return 1; nz[n] = fei(n-1)+fei(n-2); return nz[n]; } //时间复杂度:O(n) pell数列 规律:an=2*a(n-1)+a(n-2) 特殊条件:a1=1,a2=2 int nz[1000050]={0,1,2}; int pell(int n){ if(nz[n]!=0) return nz[n]; if(n<=2) return n; nz[n]=2*pell(n-1)+pell(n-2); return nz[n]; } int n,k; int main(){ cin>>n; while(n--){ cin>>k; if(nz[k]!=0) cout<<nz[k]<<endl; else cout<<pell(k)<<endl; } return 0; } 阶乘和 s=1!+2!+3!+...+n! 输入n(1<=n=20),输出s int s2=0,s1=1; for(int i=1;i<=n;i++){ s1*=i; s2+=s1; } s=1!+2!+3!+...+n! 输入n(1<=n<=1000),输出s string gjj(string s1,string s2){ string ans; //加法 return ans; } string gjc(string s1,string s2){ string ans; //乘法 return ans; } string s2="",s1="1"; for(int i=1;i<=n;i++){ s1=gjc(s1,to_string(i)); s2=gjj(s1,s2); } cout<<s2; string ggj(string a1,string b1){ // 原计算过程 string ans=""; for(i=lenc;i>=1;i--) { ans+=to_string(c[i]); //ans+=(char)(c[i]+'0'); } return ans; } (责任编辑:admin) |