有n步台阶一次只能上1步或2步共有多少种走法?

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;
	}
}
发布了22 篇原创文章 · 获赞 6 · 访问量 505

猜你喜欢

转载自blog.csdn.net/qq_33732195/article/details/103989311