#include <iostream> using namespace std; const int N = 25; int F[25] = {1,1}; int Fib(int n){ if(F[n]) return F[n]; return F[n]=Fib(n-1)+Fib(n-2); } int main(){ int T; cin>>T; while(T--){ int x; cin>>x; cout<<Fib(x-1)<<endl;} //注意第几个数减一才对应数组下标 return 0; }
用数组存下递归过的数据,减少重复计算次数,将计算过的值记录到数组中,下次计算的时候直接读出计算过的值而不是再递归计算该值。
也可以这样:
nt F[MAX]={1,1}; //前两项赋值为1 for(int i=2;i<n;i++) F[n]=F[n-1]+F[n-2];