47 遞迴函式分析

2021-10-02 10:06:29 字數 1964 閱讀 7923

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境: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位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...