int climbStairs(int n) { int s; if(n==1){ return 1; }else if(n==2){ return 2; }else{ return s=climbStairs(n-1)+climbStairs(n-2); } }
这种问题很容易让人想到递归,但是发现到了n=44的时候,就出现“时间限制到”的问题了,这也是我第一次体会到递归虽然简单,但是所耗费的时间也很长这一常识。
然后换种思路,豁然开朗!
int climbStairs(int n) { int s; if(n==1){ return 1; } int res[n+1]; res[1]=1; res[2]=2; for(int i=3;i<=n;i++){ res[i]=res[i-1]+res[i-2]; } return res[n]; }
猜想一般递归问题都转化为动态规划问题: