資料結構與演算法第 3 講 遞迴基礎

2021-09-05 09:30:06 字數 1165 閱讀 1598

程式呼叫自身的程式設計技巧稱為遞迴(recursion)。遞迴做為一種演算法在程式語言中廣泛應用。 乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。遞迴的能力在於用有限的語句來定義物件的無限集合。

一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。比如著名的斐波那契數列,漢諾塔問題其實都是遞迴的思想,當我們用遞迴去解決時發現這些問題很容易被我們用程式來表現,後面我們講到的二叉樹的遍歷也會用到。下面我們先用遞迴的思想來描述一下斐波那契數列和漢諾塔問題:

/**

* 斐波那契數列

* 1 1 2 3 5 8 13 21 .....

*/public int fbnq(int n)else

}/**

* 漢諾塔問題

* @param i

* @param start

* @param middle

* @param end

*/public void hanoi(int i,int start,int middle,int end)else

}

/**

* 遞迴排序

* @param array

* @param left即取資料來源的0號位置

* @param right即取資料來源最末尾位置

*/public void margesort(int array,int left,int right)else

}/**

* 遞迴排序

* @param arry

* @param left

* @param mid

* @param right

*/public void marge(int arry,int left,int mid,int right)

for (int i=mid;i<=right;i++)

int i=0;

int j=0;

int k=left;

while (i}

while (iwhile (j}

第3講 資料結構與演算法 棧 佇列

棧的特點是,先進後出,後進先出。只允許在一端插入和刪除資料。想象往乙個桶裡放東西的過程 如瀏覽器頁面的前進後退 函式呼叫都是用棧來實現的。注 我們常說的資料結構裡 堆疊 其實就是 棧 和 堆 是完全不同的概念。用 python 的列表來實現乙個棧 class stack object 空列表作為初始...

資料結構與演算法 基礎演算法篇 遞迴

遞迴是一種非常高效 簡潔的編碼技巧,一種應用非常廣泛的演算法,比如dfs深度優先搜尋 前中後序二叉樹遍歷等都是使用遞迴。方法或函式呼叫自身的方式稱為遞迴呼叫,呼叫稱為遞,返回稱為歸。基本上,所有的遞迴問題都可以用遞推公式來表示,比如 f n f n 1 1 f n f n 1 f n 2 f n n...

資料結構與演算法基礎 二 遞迴

這裡主要講一下運用遞迴的典型的例子 斐波那契數列 和 漢諾塔問題 遞迴 指在乙個方法 函式 的內部呼叫該方法本身的程式設計方式 1.斐波那契數列 1 1 2 3 5 8 13 規律 前兩個數之和等於第三個數 1 1 2,1 2 3,3 5 8 實現如下 package makasa1test 用遞迴...