问题:
一只小青蛙上台阶,它一次可以跳1阶或2阶,现有n阶的台阶,问小青蛙共可以有多少种上台阶的方法。
问题分析:
一阶时为一种,2阶时为2种,3阶时为3种。。。符合fibonacci 数列(使用二叉树可很好理解,如5阶台阶,头节点为5,后续为4和3,后续两节点的子节点为3、2和2、1,依次类推。)。
编程求解:
迭代:
迭代较简单的递归而言,效率更高,因为在递归求解中会涉及很多的重复计算。
#include<iostream>
using namespace std;
int JumpSteps(int n)
{
int n1=1;
int n2=2;
int result=0;
if(n==1)
{
return 1;
}
if(n==2)
{
return 2;
}
for(int i=3;i<=n;i++)
{
result = n1+n2;
n1 = n2;
n2 = result;
}
return result;
}
int main()
{
int n;
cout<<"请输入台阶数:";
cin>>n;
cout<<JumpSteps(n);
}
递归:
n=5
#include<iostream>
using namespace std;
int Fbi(int i)
{
if(i==1)
{
return 1;
}
else if(i==2)
{
return 2;
}
else
{
return Fbi(i-1)+Fbi(i-2);
}
}
int main()
{
cout<<Fbi(5)<<endl;
return 0;
}