剑指offer-递归问题集合(使用迭代的方法对递归问题进行优化)

剑指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
总结:使用迭代的方法对递归问题进行优化,能够显著的改善时间复杂度,在空间复杂度上性能也有所提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值