【這對你的編碼能力是個質的飛躍,如果你想成為乙個很厲害的程式設計師,資料結構是必須要掌握的,因為計算機專業的本科生也達不到這水平!計算機特別適合用遞迴的思想來解決問題,但是我們人類用遞迴的思想來考慮問題就會感到十分困擾,這也是很多學過遞迴的人一直都搞不明白的地方!那是不是遞迴可以隨便寫,當然不是,有些同學一用遞迴程式就死翹翹了。遞迴的思想是軟體思想的基本思想之一,在樹和圖論上面,幾乎全是用遞迴來實現的,最簡單,像求階乘這種沒有明確執行次數的問題,都是用遞迴來解決】
乙個函式自己直接或者間接呼叫自己(乙個函式呼叫另外乙個函式和他呼叫自己是一模一樣的,都是三步,只不過在人看來有點詭異)
1.遞迴必須有乙個明確的終止條件
2.該函式的處理規模必須遞減
3.這個轉化必須是可解的
理論上迴圈能夠解決的,肯定可以轉化為遞迴,但這個轉化是乙個複雜的數學過程,遞迴能解決的不一定能轉化為迴圈,初學者只要把經典的遞迴演算法看懂就型,至於有沒有能力運用看個人。
遞迴: 易於理解 速度慢 儲存空間大
迴圈: 不易於理解 速度快 儲存空間小 (這地方不太理解,明明是遞迴不好理解,迴圈好理解吧 ?_?)
樹和森林就是以遞迴的方式定義的
樹和圖很多演算法是以遞迴實現的
很多數學公式的就是以遞迴的方式定義的,斐波那契數列。。。
//遞迴解 前n自然數之和
long sum(int n)
//遞迴 階乘
long factorial(int n)
//遞迴 斐波那契數列
long fab(int n)
return f3;*/
if (1 == n || 2 == n)
return 1;
else
return fab(n - 1) + fab(n - 2);
}//遞迴 正整數倒序輸出
void reverse(int n)
}//遞迴 字串全排列輸出
int k = 0;
void swap(char* s, int m, int n)
void sort(char* s, char* c)//函式至少要兩個引數,乙個用來記錄字串頭指標,還有乙個記錄當前處理的子串的頭指標
else }
}
郝斌資料結構4遞迴
1 定義 乙個函式自己直接或間接呼叫自己 2 舉例 include include voidf int n else int main void 執行結果 3 n的階乘用遞迴來實現 3.1 如果不用遞迴來實現 3.2 如果用遞迴來實現 4 1 2 3 100之和用遞迴來實現 4.1 不用遞迴實現 4...
郝斌老師 資料結構入門 之快速排序
include void quicksort int int,int int findpos int int,int 主要思想 通過移動和賦值的方式確定第乙個元素的最終位置,然後在用同樣的方法分別確定第乙個元素的最終位置的左邊一部分和右邊一部分的第乙個元素的最終位置,以此類推 intmain voi...
郝斌資料結構自學筆記 5 預備知識 指標
5 預備知識 指標 2 指標的重要性 指標是c語言的靈魂 定義 cpu 位址線,控制線,資料線 記憶體 指標 指標就是位址,位址就是指標。指標變數是存放記憶體單元位址的變數。指標的本質是乙個操作受限的非負整數。分類 1.基本型別的指標 2.指標和陣列的關係 變數並不一定連續分配,隨機分配記憶體。記憶...