n个台阶每次走一个或者两个走法数,这个属于递归分治算法么????
/**
* 跳台阶问题:一共n个台阶,每次跳一个台阶或者两个,共有多少种走法
* @param n 台阶总数
* 递归分治算法
*/
public int stairsProblem(int n){
int result = 0;
if(n<0)
return 0;
if(n==1||n==0)//1代表走到最后只有一个台阶,0代表最后一步走了2个台阶,
//,一种走法走通了因此返回1加给result
return 1;
for(int i=1;i<=2;i++){
result += stairsProblem(n-i);//一共的走法数等于第一次走一步的走法数+第一次走2步的走法数
//递归下去到边界
}
return result;
}
其实这个和Fibonacci很相似,
复杂度:
要求得f(10),需要求得f(9)和f(8)。同样,要求得f(9),要先求得f(8)和f(7)……
我们用树形结构来表示这种依赖关系
f(10)
/ /
f(9) f(8)
/ / / /
f(8) f(7) f(6) f(5)
/ / / /
f(7) f(6) f(6) f(5)
T(n)= T(n-1) +T(n-2)…..
来源:http://blog.csdn.net/v_july_v/article/details/6126406