//递归法
/**
* 思路:自上而下的方式。
* 最后一步可能是从第n-1阶往上走1阶、从第n-2阶往上走2阶或从第n-3阶往上走3阶。
* 因此,抵达最后一阶的走法,抵达这最后三阶的方式的综合。
* @param n
* @return
*/
public static int countWays(int n){
if(n<0)
return 0;
else if(n==0)//注意此处条件
return 1;
else{
return countWays(n-1)+countWays(n-2)+countWays(n-3);
}
} //动态规划
/**
* 思路:每次调用都会分支出三次调用。予以动态规划加以修正。
* @param n
* @param map
* @return
*/
public static int countWaysDP(int n,int[] map){
if(n<0)
return 0;
else if(n==0)
return 1;
else if(map[n]>-1)
return map[n];
else{
map[n]=countWaysDP(n-1,map)+countWaysDP(n-2,map)+countWaysDP(n-3, map);
return map[n];
}
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/shangqing1123/article/details/47360591