public class test {
//递归算法
public static long f(int n){
if(n==0) return 0;
if(n==1 || n==2) return n;
return f(n-1) + f(n-2);
}
//循环遍历
public static int loop(int n){
if(n<1){
throw new IllegalArgumentException(n + "不能小于1");
}
if(n==1 || n==2){
return n;
}
int one = 2; //走到至最后剩下2级台阶的走法,有2种 (2)(1,1)
int two = 1; //走到至最后剩下1级台阶的走法,有1种 (1)
int sum = 0; //总走法
//f(n)=f(n-1)+f(n-2)
//f(3)=f(2)+f(1)
//f(3)=two+one;
//f(4)=f(3)+f(2)
//f(4)=(two+one)+one
//定义sum=two+one,f(2)=one ==> f(4)=sum+one
//f(5)=f(4)+f(3)
//f(5)=(sum+one)+f(3)
//定义sum=sum+one,one=f(3) ==> f(5)=sum+one
for(int i=3; i<=n; i++){
//总走法数,当i=3,最后剩下1或2步的走法
sum = two + one; //5
two = one; //2 3
one = sum; //3 5
}
return sum;
}
}
有n步台阶一次只能上1步或2步共有多少种走法?
最新推荐文章于 2022-11-15 11:59:13 发布