问题描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:1级台阶只有一种跳法,2级台阶有两种跳法。
我们考虑第n个台阶
最后一步,我们可以跳一阶,也可以跳两阶
func(n)=func(n-1)+func(n-2); n>2;
func(1)=1;
func(2)=2;
int func(int n)
{
if(n==1)
return 1;
if(n==2)
return 2;
return func(n-1)+func(n-2);
//根据最后一步可以分为两种情况,跳一个还是跳两个。
}
若题目中的青蛙可以跳3步
则可以这样做
func(1)=1;
func(2)=2;
func(3)=4;
func(n)=func(n-1)+func(n-2)+func(n-3); n>3;
变态跳台阶:如果这只青蛙可以跳1,2,3....n步呢?
老规矩我们根据最后一下跳了多少步可以算出知道有n种情况:
跳了1步: 则f(n)=f(n-1);
跳了2步:则f(n)=f(n-2);
。。。。
跳了n步:f(n)=1;
从上面可以总结出:
f(n)=f(1)+f(2)+.......+f(n-1)+1;
则函数可以写出:
int func(int n)
{
if(n==0)
return 1;
else{
int sum=0;
for(int i=1;i<=n;i++)
{
sum+=func(n-i);
}
return sum;
}
}