有时候递归有很多重复计算,造成时间复杂度很大,可以采用记忆化的方法来减小时间复杂度。
#include<stdio.h>
const long long mod = 1e9+7;
long long num[1000000]; //利用数组记录计算过的值
long long func(int x){
if (x==1||x==0){
return 1;
}
if(num[x]>0) return num[x];
else {
num[x]=(x*func(x-1)+(x-1)*func(x-2))%mod;
return num[x];
}
}
int n;
int main(){
cin>>n;
cout<<func(n);
return 0;
}