- C語言函數(shù)的遞歸和調(diào)用 推薦度:
- 相關(guān)推薦
C語言函數(shù)的遞歸調(diào)用
一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用,這種函數(shù)稱為遞歸函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進入新的一層。
C語言函數(shù)的遞歸調(diào)用
【示例】用遞歸計算 n!。階乘 n! 的計算公式如下:
根據(jù)公式編程:
long factorial(int n){
long result;
if(n==0 || n==1){
result = 1;
}else{
result = factorial(n-1) * n; // 遞歸調(diào)用
}
return result;
}
這是一個典型的遞歸函數(shù)。調(diào)用factorial后即進入函數(shù)體,只有當(dāng) n==0 或 n==1 時函數(shù)才會執(zhí)行結(jié)束,否則就一直調(diào)用它自身。
由于每次調(diào)用的實參為 n-1,即把 n-1 的值賦給形參 n,所以每次遞歸實參的值都減 1,直到最后 n-1 的值為 1 時再作遞歸調(diào)用,形參 n 的值也為1,遞歸就終止了,會逐層退出。
例如求 5!,即調(diào)用factorial(5)。當(dāng)進入factorial函數(shù)體后,由于 n=5,不等于0或1,所以執(zhí)行result = factorial(n-1) * n;,即result = factorial(5-1) * 5;,接下來也就是調(diào)用factorial(4)。這是第一次遞歸。
進行四次遞歸調(diào)用后,實參的值為 1,也就是調(diào)用factorial(1)。這時遞歸就結(jié)束了,開始逐層返回。factorial(1) 的值為 1,factorial(2) 的值為 1*2=2,factorial(3) 的值為 2*3=6,factorial(4) 的`值為 6*4=24,最后返回值 factorial(5) 為 24*5=120。
注意:為了防止遞歸調(diào)用無終止地進行,必須在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的辦法是加條件判斷,滿足某種條件后就不再作遞歸調(diào)用,然后逐層返回。
遞歸調(diào)用不但難于理解,而且開銷很大,如非必要,不推薦使用遞歸。很多遞歸調(diào)用可以用迭代(循環(huán))來代替。
【示例】用迭代法求 n!。
復(fù)制純文本新窗口
long factorial(int n){
int i;
long result=1;
if(n==0 || n==1){
return 1;
}
for(i=1; i<=n; i++){
result *= i;
}
return result;
}
【C語言函數(shù)的遞歸調(diào)用】相關(guān)文章:
C語言函數(shù)遞歸教程03-30
Java程序調(diào)用C/C++語言函數(shù)的方法12-01
C語言程序的可讀性和函數(shù)的調(diào)用03-19