欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

xzj 复习递归和高精度

时间:2024-06-01 12:40 作者:admin 点击:
递归优化: 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]

递归优化:

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)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%