大家都知道斐波那契数列。 这里需要输入整数n。 请输出斐波那契数列的n项(从0开始,0项为0 )。 n=39考虑递归求解很简单:
public class solution { public int Fibonacci (intn ) ) if ) n==0)返回0; if(n==1)返回1; returnFibonacci(n-2 ) Fibonacci (n-1 ); }n较大时,可以明显感觉到算法的执行速度较慢,是因为上述返回代码中使用了2层递归,使用递归的思路比较好,但在这里使用迭代可以明显改善算法的执行效率,在空间上改变时间
公共类解决方案{公共int Fibonacci (intn ) ) if ) n2 )返回n; int f=0,g=1; int result=0; for(intI=1; i n; I ) { result=f g; f=g; g=result; } return result; }问题的变形可以用2*1的小矩形横向或纵向,覆盖更大的矩形。 要用n个2*1小矩形重复覆盖2*n大矩形,共有几种方法?
分析
关于n步骤操作,可以分为以下两种情况进行讨论。
1 .第一步这样涵盖
那么f(n )=f(n-1 );
2 .第一步这样涵盖
下一步只有这样涵盖的可能性
那么f(n )=f (n-2 ) ) )。
因此,f(n )=f(n-1 ) f (n-2 )
public class solution { publicintrectcover (int target ) if ) target=1} { return 1; (if ) target*2==2) { return 1; }elseif(target*2==4) ) { return 2; } else { returnrectcover ((target-1 ) ) rect cover (target-2 ); } }