问题
普通的动态规划 ----递归
由于最后一步一定是跳一阶或者两阶台阶,所以f(n) = f(n-1) + f(n-2), 这里复杂的问题变成了子问题求解,符合动态规划的使用条件,所以这道题可以用动态规划来做,递归代码如下:
public int function(int n){
if(n==0||n==1){
//当台阶只有零阶一阶时只有一种走法。
return 1;
}
return function(n-1)+function(n-2);
}
改进 ----滚动数组
上面的这种递归的方法在n比较小的时候可以得出结果,但当n越来越大时,效率低下,为了改善空间复杂度,使用了滚动数组的思想来解决这个问题,优化算法,代码如下:
public int function(int n){
//第一次循环比较特殊,需要手动给f(0), f(1)赋值,所以下面的循环只需要n-1次循环即可。
int p = 1; //f(0)
int q = 1; //f(1)
int r = p+q