一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少种跳法,并分析算法的时间复杂度。
/********************************************************************************
首先我们考虑最简单的情况。如果只有1级台阶,那显然只有一种跳法。
如果有2级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1级;另外一种就是一
次跳2级。现在我们再来讨论一般情况。
我们把n级台阶时的跳法看成是n的函数,记为f(n)。
当n>2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于
后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种选择是第一次跳2级,此时跳法
数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。
因此n级台阶时的不同跳法的总数f(n)=f(n-1)+(f-2)。
把上面的分析用一个公式总结如下:
f(n)=n n=1,2;
f(n)=f(n-1)+f(n-2) n>2.
********************************************************************************/
#include <iostream>
using namespace std;
int jump_sum0(int n)//递归
{
int sum;
if(n <= 0)
return 0;
if(n==1 || n==2)
return n;
if(n > 2)
return jump_sum0(n-1)+jump_sum0(n-2);
}
int jump_sum1(int n)//迭代
{
int an;
int a1=1;
int a2=2;
if(n <= 0)
return 0;
if(n==1 || n==2)
return n;
for(;n>2;--n)
{
an=a1+a2;
a1=a2;
a2=an;
}
return an;
}
int main()
{
int n=7;
cout<<jump_sum0(n)<<endl;
cout<<jump_sum1(n)<<endl;
system("pause");
return 0;
}