什么叫递归?
递归是方法(函数)调用方法本身的一种编程技巧;
使用递归需要满足2个条件:
1)有反复执行的过程(调用自身)
2)有跳出反复执行过程的条件(递归出口)
递归算法的应用
1.求n!,即阶乘;这大概是我第一次接触递归,很简单,却又很能揭示递归的原理;
2.二叉树的遍历、反转;
3.链表的反转;
下面来用代码实现;
二叉树的反转:
public static Node invertTree(Node root) {
Node tmpNode=new Node(0);
if(root==null){
return null;
}else{
tmpNode=root.leftChild;
root.leftChild=root.rightChild;
root.rightChild=tmpNode;
invertTree(root.leftChild);
invertTree(root.rightChild);
}
return root;
}
链表的反转:
public static Node Reverse1(Node head) {
// head看作是前一结点,head.getNext()是当前结点,reHead是反转后新链表的头结点
if (head == null || head.getNextNode() == null) {
return head;// 若为空链或者当前结点在尾结点,则直接还回
}
Node reHead = Reverse1(head.getNextNode());// 先反转后续节点head.getNext()
head.getNextNode().setNextNode(head);// 将当前结点的指针域指向前一结点
head.setNextNode(null);// 前一结点的指针域令为null;
count++;
return reHead;// 反转后新链表的头结点
}