严蔚敏-数据结构-递归算法总结

    在看严蔚敏的数据结构视频,在32课时的时候,对递归算法进行了总结。在网上没找到对应的资料。而严蔚敏老师总结的又很不错,所以觉得有必要这里记录下(不是完全照搬,详细可以去找对应的视频)。一共有5点。

    1、递归特性,一般都是可以分解成相同的小问题,同时解又可以归并。注意:递归,一定有个结束的时候(即要关注结束条件);还有注意参数的对应关系。

    2、递归的实现,用的是“栈”。所以,递归,一定可以通过“栈”来转化为非递归实现。而栈的非递归函数肯定可以改写为递归实现。需要注意:递归的层次,决定了存储量的大小。

    3、递归树是递归算法的分析工具。“递归树”深度是递归深度;递归树的节点数,正好是递归执行操作的次数;若递归树是单支的(阶乘问题)或者递归树中有许多重复节点(斐波那契数列求解),那么不适合用递归。

    4、递归中的尾递归是很容易消除的。递归,许多适合是因为需要保存在进入函数之前的数据,在函数出来之后再用。但是,尾递归的话,是最后一个调用函数,所以不需要保存进入函数之前的数据了,所以可以直接消除。比如,二叉树的遍历(中序、先序)访问右子树可以用循环的。具体可以看最后的例子。

     5、可以用递归方程来表示递归函数的时间性能。(不是很明白)例子是

          汉诺塔问题时间是:T(n)=2T(n-1)+c;   T(0) = 0;


 下面,是第4点的例子:

//二叉树先序遍历;
//递归;
void preOrderTraverse(BiTree T)
{
    visit(T->data);
    preOrderTraverse(T->lchild);
    preOrderTraverse(T->lrchild);
}
//由于访问右子树是尾递归,所以可以消除.
void preOrderTraverse(BiTree T)
{
    while (T)
    {
        visit(T->data);
        preOrderTraverse(T->lchild);
        T = T->rchild;
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值