青蛙跳台阶算法,n m

问题描述:一个青蛙,一次可以跳1级台阶,也可以跳2级,…也可以跳n级,总共有m级台阶,问青蛙总共有多少种跳法?

问题分析:
以n=2为例
当m =1 时f(1) = 1
当m =2 时f(2) = 2
当m =3 时f(3) = 3 = f(2)+f(1)
当m =4 时f(4) = 5 = f(3)+f(2)
因此当m>2的时候f(m) = f(m-1)+f(m-2)
参考斐波那契数列

以n=3为例
当m =1 时f(1) = 1
当m =2 时f(2) = 2
当m =3 时f(3) = 4
当m =4 时f(4) = 7 = f(3)+f(2)+f(1)
当m =5 时f(5) = 13 =f(4)+f(3)+f(2)
因此当m>3的时候f(m) = f(m-1)+f(m-2)+f(m-3)

以此类推当n=n的时
当m =1 时f(1) = 1
当m =2 时f(2) = 2
当m =3 时f(3) = 4
当m =4 时f(4) = 8
当m =5 时f(5) = 16

当m = n时候f(m) = 2*f(m-1)
当m > n的时候 f(m) = f(m-1)+f(m-2)+…+f(m-n)
因此 f(m-1) = f(m-2) + f(m-3)+…+f(m - n)+f(m -n -1)
简化得到:f(m) = 2f(m-1) - f(m-n-1)

   public int stepNM(int n,int m){
	if(m <= 0) {
  		return 1;
 	}else if(m == 1) {
  		if(n >=1) {
   			return 1;
		  }else {
			   return 0;
  		}
 	}else if(m == 2) {
 		 if(n < 1) {
  			 return 0;
  		}else if(n==1) {
   			return 1;
  		}else if(n>=2) {
  	 		return 2;
		}  
	  }else if(n >= m) {
  		return 2*stepNM(n,m-1);
 	  }else {
      		return 2*stepNM(n,m-1) - stepNM(n,m-n-1);
    	}
 	return -1;
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值