递归

递归的定义

                 递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方                   法。递归常用来解决结构相似的问题

递归有两个基本要素:

                                 1. 边界条件:确定递归到何时终止,也称为递归出口 
                                  2.递归模式:大问题是如何分解为小问题的,也称为递归体

递归的特性

                  1.必须有一个明确的结束条件

                  2.每次递归都是为了让问题规模变小

                  3.递归层次过多会导致栈溢出,且效率不高

递归的应用场景:

                     在我们实际学习工作中,递归算法一般用于解决三类问题:

                     1.问题的定义是按递归定义的(Fibonacci函数,阶乘)

                     2.问题的解法是递归的(有些问题只能使用递归方法来解决,例如,汉诺塔问题)

                     3.数据结构是递归的(链表、树等的操作,包括树的遍历,树的深度)

递归与循环:

                   递归与循环是两种不同的解决问题的典型思路

public class BinaryTreeDepth {

    /**     
     * @description 返回二叉数的深度
     * @author rico       
     * @param t
     * @return     
     */
    public static int getTreeDepth(Tree t) {

        // 树为空
        if (t == null) // 递归终止条件
            return 0;

        int left = getTreeDepth(t.left); // 递归求左子树深度,缩小问题的规模
        int right = getTreeDepth(t.left); // 递归求右子树深度,缩小问题的规模

        return left > right ? left + 1 : right + 1;
    }
}



         

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值