注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。
測試環境:ubuntu 10.10
gcc版本:4.4.5
一、遞迴的數學思想
1) 遞迴是一種數學上分而自治的思想
2) 遞迴需要有邊界條件
- 當邊界條件不滿足時,遞迴繼續進行
- 當邊界條件滿足時,遞迴停止
遞迴將大型複雜問題轉化為原問題相同但規模較小的問題進行處理。
大問題化成有相似度的小問題,單獨處理乙個小問題!
二、遞迴函式
1) 函式體內部可以呼叫自己
2) 遞迴函式
- 函式體中存在自我呼叫的函式
3) 遞迴函式是遞迴的數學思想在程式設計中的應用
- 遞迴函式必須有遞迴出口
- 函式的無限遞迴將導致程式棧溢位而崩潰
三、遞迴函式設計技巧
1) 遞迴模型的一般表示法
四、遞迴函式設計示例一
1) 用遞迴的方法編寫函式求字串長度
strlen(s+1)對應藍色字串。
程式設計實驗
遞迴版strlen
47-1.c
#include int strlen_r(const char* s)
else //\0為結尾
}int main()
操作:
1) gcc 47-1.c -o 47-1.out編譯正確,列印結果:
3
0
五、遞迴函式設計示例二
1) 斐波拉契數列遞迴解法
兩個終止條件。
程式設計實驗
斐波拉契數列
47-2.c
#include int fac(int n)
else if( n == 2 )
else
return -1;
}int main()
操作:
1)編譯:gcc 47-1.c -o 47-1.out,列印結果:
1
134
六、遞迴函式設計示例三
1) 漢諾塔問題
- 將木塊借助b柱由a柱移動到c柱
- 每次只能移動乙個木塊
- 只能出現小木塊在大木塊之上
2) 漢諾塔問題分解
- 將n-1個木塊借助c柱由a柱移動到b柱
- 將最底層的唯一木塊直接移動到c柱
- 將n-1個木塊借助a柱由b柱移動到c柱
程式設計實驗
漢諾塔問題求解
47-3.c
#include void han_move(int n, char a, char b, char c)
else
}int main()
小結
1) 遞迴是一種將問題分而自治的思想
2) 用遞迴解決問題首先要建立遞迴的模型
3) 遞迴解法必須要有邊界條件,否則誤解
OSTaskCreate()函式分析
int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...
getopt函式分析
函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...
uCOS OSTaskCreate()函式分析
int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...