1. 程式人生 > >有關遞迴演算法的面試題java實現

有關遞迴演算法的面試題java實現

什麼叫遞迴?

遞迴是方法(函式)呼叫方法本身的一種程式設計技巧;

使用遞迴需要滿足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;// 反轉後新連結串列的頭結點
	}