关于青蛙跳台阶为什么不是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;
}

猜你喜欢

转载自blog.csdn.net/guanxunmeng8928/article/details/107472662