假设到n阶楼梯有f(n)种跳法
由于跳到n阶台阶上只能由n-1或者n-2两种跳法
那么f(n)就有f(n)=f(n-1)+f(n-2)种跳法
就有
f(n)=1 (n=1)
f(n)=2 (n=2)
f(n)=f(n-1)+f(n-2) (n>2)
根据其规律可以由递归实现
-(int)recursiveCalculate:(int)n
{
if (n==2)
{
return 2;
}
else if(n==1)
{
return 1;
}
else if(n<1)
{
return 0;
}
return [self recursiveCalculate:n-1] + [self recursiveCalculate:n-2];
}
由于该算法多个节点会重复计算,使用递归的时间复杂度成指数级别递增,优化为非递归实现为
-(void)calculateTotal:(int)n
{
int first = 0;
int second = 1;
int third = 0;
for (int i= 0; i<n; i++)
{
third = first + second;
first = second;
second = third;
}
}