走楼梯问题

问题:有一个小孩在上楼梯,楼梯有n阶,小孩一次可以上1阶、2阶、3阶,请实现一个方法,计算小孩有多少种上楼的方式

 

package 递归;
import java.util.Scanner;
/**
 * 
 * 
 * 如果有1个台阶,走法有一种(一步走1个台阶) 即f(1)=1
 * 如果有2个台阶,走法有2种(一种是上1阶,再上1阶,另一种是一步上2阶) 即f(2)=2
 * 如果有3个台阶,走法有3种(f(1)+f(2)),就是在走了2阶了,然后最后一阶该怎么走 那就加上f(1)呗
 * 当有n个台阶(n>3)时,我们缩小问题规模,可以这样想:最后是还剩1个台阶了,之前已经走了(n-1)个台阶 有f(n-1)种走法
 * 如果最后还剩2个台阶,之前走了(n-2)个台阶,那就有f(n-2)种走法
 * 
 * 
 * @author Ad
 *
 */
public class 走阶梯1 {
	private static int num;
	static int mod=1000000007;
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int num=input.nextInt();
//		method(num);
		System.out.println(method(num,mod));
	}

	private static int  method(int num,int mod) {
		if (num==1) {
			return 1;
		}
		if(num==2){
			return 2;
		}
		return method(num-1,mod)%mod+method(num-2,mod)%mod;
	}

}
package 递归;
import java.util.Scanner;
/**
 *有一个小孩在上楼梯,楼梯有n阶,小孩一次可以上1阶、2阶、3阶
 *请实现一个方法,计算小孩有多少种上楼的方式
 * 
 * @author Ad
 *
 */
public class 走阶梯2 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int num=input.nextInt();
//		method(num);
		System.out.println(method(num));
	}
	private static int  method(int num) {
		int mod=1000000007;  //为了防止溢出,结果求模 mod 1000000007
		if(num==1) return 1;
		if(num==2) return 2;
		if(num==3) return 4;
		int x1=1;
		int x2=2;
		int x3=4;
		for (int i = 4; i <=num; i++) {
			int x_1=x1;
			x1=x2;
			x2=x3;
			x3=(((x1+x2)%mod)+x_1)%mod;
		}
		return x3;
	}

}


//
// num: 1	2	3	4	5	x6
// 		x1  x2  x3
//          x1  x2  x3
//          	x1  x2   x3
		

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值