本文共 757 字,大约阅读时间需要 2 分钟。
剑指offer中跳台阶,变态跳台阶以及矩形覆盖均是递归类型。递归问题的核心在于找出转移关系,也就是当前项和前一项或是前两项的关系。本文着重点在使用迭代的方法实现递归。
虽然这几道题都没有限定时间复杂度,使用递归均可通过,但是使用迭代的方法可以对其进行优化。 以矩形覆盖为例: 使用递归的方法:int rectCover(int number) { int sum,first=1,second=2; if(number<1) return 0; if(number<3) return number; sum=rectCover( number-1)+rectCover(number-2); return sum; }
耗时638ms,内存592k;
使用迭代的方法:int rectCover(int number) { int sum,first=1,second=2; if(number<1) return 0; if(number<3) return number; for(int i=3;i<=number;++i) { sum=first+second; first=second; second=sum; } return sum; }
耗时3ms,内存480K
总结:使用迭代的方法对递归问题进行优化,能够显著的改善时间复杂度,在空间复杂度上性能也有所提升。转载地址:http://mndmi.baihongyu.com/