递归的定义:
递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方 法。递归常用来解决结构相似的问题
递归有两个基本要素:
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;
}
}