关于青蛙跳台阶为什么不是f(n)=f(n-1)+f(n-2)+2的思考

在看青蛙台阶的算法时想法到一个问题

f(n)=f(n-1)+f(n-2)

青蛙在n-1阶,有f(n-1)种跳法。

在n-2阶,有f(n-2)种跳法。

那么n-1到n有一种跳法,就是跳一阶。

n-2到n有一种跳法,跳两阶。

那为什么最后到n阶的跳法不是
f(n)=f(n-1)+f(n-2)+2呢?

让我们先从0阶开始往5阶跳的顺序。
顺序再让我们看从5阶往0阶跳的逆序
逆序通过逆序我们可以看到,想要到达5阶,青蛙就必须先要到达4阶和3阶,那么0阶到4阶或者0阶到3阶的路线总数已经确定,也就意味着起点数目已经确定(也就是0的个数)。 那么到5阶,只需要统计4阶和3阶的起点数,就可以知道,到5阶有多少种路线。
因为最后从n-1阶跳到n阶只有一种跳法不会增加跳法。
也就是说:1阶跳到n-1再跳到n阶的跳法总数 == 1阶跳到n-1阶的跳法总数
同理:1阶跳到n-2再跳到n阶的跳法总数 == 1阶跳到n-2阶的跳法总数

那么这个规律也就符合斐波那契公式。

//计算跳台阶的方法
int calcWays(int &number){
if(number<0)	return false;
if(number<1)	return 0;
if(number==1)	return 1;
if(number==2)	return 2;
step=0;	a=1; b=2;
for(int i=3;i<number+1;i++)
{
	step=a+b;
	a=b;
	b=a;
}
return step;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值