手把手教你如何使用C語言函數(shù)遞歸
C語言是一種廣泛應(yīng)用于計(jì)算機(jī)編程的靜態(tài)數(shù)據(jù)類型檢查、支持多范型的通用程序設(shè)計(jì)語言。它可以支持過程化程序設(shè)計(jì)、數(shù)據(jù)抽象化、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)以及基于原則設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。在系統(tǒng)開發(fā)、引
C語言是一種廣泛應(yīng)用于計(jì)算機(jī)編程的靜態(tài)數(shù)據(jù)類型檢查、支持多范型的通用程序設(shè)計(jì)語言。它可以支持過程化程序設(shè)計(jì)、數(shù)據(jù)抽象化、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)以及基于原則設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。在系統(tǒng)開發(fā)、引擎開發(fā)等應(yīng)用領(lǐng)域中,C語言是常用的編程語言之一,深受廣大程序員的喜愛。
C語言數(shù)學(xué)庫中的常見函數(shù)
C語言數(shù)學(xué)庫提供了許多常用的數(shù)學(xué)函數(shù),包括計(jì)算絕對值、取整、冪運(yùn)算、三角函數(shù)等。下面將手把手教你如何使用幾個(gè)常見的函數(shù)。
1. 鼠標(biāo)雙擊或右擊打開桌面上的Dev-C 軟件,讓其運(yùn)行起來。Dev-C 是一個(gè)非常適合初學(xué)者使用的C/C 集成開發(fā)環(huán)境(IDE),它在Windows窗口運(yùn)行環(huán)境下工作。這款軟件遵守GPL許可協(xié)議分發(fā)源代碼,集成了MinGW中的GCC編譯器、GDB調(diào)試器和AStyle格式整理器等自由軟件,具有強(qiáng)大的功能和清晰的界面分類。
2. 點(diǎn)擊文件菜單,選擇新建源代碼。這時(shí)新建的代碼文本還沒有命名,是一個(gè)空文件。通過界面左上角的文件選項(xiàng),選擇另存為,將文件保存在電腦的任意位置。為了方便下次查找,可以將文件保存在桌面上或其他易于找到的地方。
什么是遞歸?
遞歸是指某個(gè)函數(shù)直接或間接地調(diào)用自身,將原問題的求解過程劃分成許多相同性質(zhì)的子問題的求解。小問題的求解很容易得到,而這些子問題的解構(gòu)成了原問題的解。遞歸的總體思想是,將待求解問題的解看作輸入變量x的函數(shù)f(x),通過尋找函數(shù)g,使得f(x) g(f(x-1)),并已知f(0)的值,就可以通過f(0)和g求出f(x)的值。遞歸也可以應(yīng)用于多個(gè)輸入變量x、y、z等,只需要朝著出口的方向推進(jìn)即可。
遞歸的特點(diǎn)
遞歸具有以下幾個(gè)特點(diǎn):
1. 遞歸式:確定如何將原問題劃分成子問題。
2. 遞歸出口:遞歸終止的條件,即最小子問題的求解??梢栽试S存在多個(gè)出口。
3. 界函數(shù):問題規(guī)模變化的函數(shù),保證遞歸的規(guī)模向出口條件靠攏。
利用遞歸解決常見問題
下面通過兩個(gè)例題,介紹如何使用遞歸思想解決實(shí)際問題。
例1:菲波那契數(shù)列。輸入一個(gè)整數(shù)n,求菲波那契數(shù)列的第n項(xiàng)。
算法:設(shè)第n項(xiàng)值為f(n),則f(n) f(n-1) f(n-2)。已知f(1)1,f(2)1,從第3項(xiàng)開始可以使用公式求解。
程序:
```c
int f(int n){
if(n1 || n2)
return 1;
else
return f(n-1) f(n-2);
}
```
例2:放蘋果。輸入m個(gè)蘋果和n個(gè)盤子,問有多少種不同的放法。
算法:設(shè)f(m,n)為m個(gè)蘋果,n個(gè)盤子的放法數(shù)目。先對n作討論:
- 當(dāng)n>m時(shí),必定有n-m個(gè)盤子永遠(yuǎn)空著,對擺放蘋果的方法數(shù)目不產(chǎn)生影響。即如果n>m,f(m,n) f(m,m)。
- 當(dāng)n 1. 有至少一個(gè)盤子空著,相當(dāng)于f(m,n) f(m,n-1); 2. 所有盤子都有蘋果,相當(dāng)于可以從每個(gè)盤子中拿掉一個(gè)蘋果,不影響放法的數(shù)目,即f(m,n) f(m-n,n)。而總的放蘋果的放法數(shù)目等于這兩者之和,即f(m,n) f(m,n-1) f(m-n,n)。 程序: ```c int f(int m, int n){ if(n1 || m0) return 1; if(n>m) return f(m,m); else return f(m,n-1) f(m-n,n); } ``` 這些遞歸函數(shù)的出口條件說明如下: - 當(dāng)n1時(shí),所有蘋果必須放在一個(gè)盤子里,返回1; - 當(dāng)沒有蘋果可放時(shí),定義為1種放法; - 遞歸的兩條路,第一條是n逐漸減少,最終到達(dá)出口條件n1;第二條是m逐漸減少,當(dāng)n>m時(shí),返回f(m,m)到達(dá)出口條件m0。