int dp(int n,int *visit){ if(visit[n]!=0){ return visit[n]; } if(n==0){ visit[n]=0; return 0; } if(n==1||n==2){ visit[n]=1; return 1; } visit[n]=(dp(n-1,visit)+dp(n-2,visit))%1000000007; return (dp(n-1,visit)+dp(n-2,visit))%1000000007; } int fib(int n){ //内存报错 0 1 2 3 4 int *visit=malloc(sizeof(int)*(n+1)); memset(visit,0,sizeof(int)*(n+1)); return dp(n,visit)%1000000007; } |