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