递归
基本概念
- 函数体内直接调用自己:直接递归
- 函数通过调用其他函数,反过来调用自己:间接递归
- 任意循环都能写成递归
递归程序的阅读
- 根据调用的情况,将函数作为图中的节点,使用有向边进行连接
- 从递归的出口点开始,逐次返回,在边上使用返回值作为边的权重
递归的三要素
- 写递归代码时,通过以下三个要素来写(以下使用二叉树的先序遍历为例)
- 确定递归函数的参数和返回值
void preorder(BiNode<T>* node)
通过对问题的具体分析,我们还可以写出尾递归来提高递归的效率
- 确定终止条件
if(node == NULL) return;
- 确定每层递归的逻辑
C++ visit(node); preorder(node->lchild); preorder(node->rchild);
优缺点
优点
- 容易编程实现
- 健壮性和可维护性好
- 充分利用计算机的算力
- 代码简短,便于阅读
缺点
- 时空效率低