程序調(diào)用自身的編程技巧稱為遞歸( recursion)。
遞歸做為一種算法在程序設(shè)計(jì)語言中廣泛應(yīng)用。 一個(gè)過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,
遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。
遞歸的主要思考方式在于:把大事化小
存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)。
每次遞歸調(diào)用之后越來越接近這個(gè)限制條件。
//接受一個(gè)整型(無符號(hào)),打印每一位
void prin_num(int num) {
if (num >9) {
prin_num(num / 10);
}
printf("%d", num % 10);
}
int main() {
int num = 0;
scanf("%d", &num);
prin_num(num);
return 0;
}
3.2 練習(xí):編寫函數(shù)不允許創(chuàng)建臨時(shí)變量以求字符串的長度//編寫函數(shù)不允許創(chuàng)建臨時(shí)變量,求字符串的長度。
int find_strlength(char * arr) {
if (*arr != '\0') {
return 1 + find_strlength(1 + arr);
}
else{
return 0;
}
}
int main() {
char arr[] = "apple";
int len = find_strlength(arr);
printf("%d", len);
return 0;
}
3.3 練習(xí):求n的階乘。遞歸寫法
//求n的階乘。(不考慮溢出)
int get_fac(int num) {
if (num >1) {
return num * get_fac(num - 1);
}
else {
return 1;
}
}
int main() {
int num = 3;
int fac = get_fac(num);
printf("%d", fac);
return 0;
}
使用factorial 函數(shù)求10000的階乘(不考慮結(jié)果的正確性),程序會(huì)崩潰。
迭代寫法
//求n的階乘,迭代
int get_fac(int n) {
int rec = 1;
for (int i = 2; i<= n; i++) {
rec *= i;
}
return rec;
}
int main() {
int num = 4;
int fac = get_fac(num);
printf("%d", fac);
return 0;
}
3.4 練習(xí):求第n個(gè)斐波那契數(shù)。//求第n個(gè)斐波那契數(shù)。(不考慮溢出)
int get_fib(int n) {
if (n >2) {
return get_fib(n - 2) + get_fib(n - 1);
}
else {
return 1;
}
}
int main() {
int n = 6;
int fib = get_fib(n);
printf("%d", fib);
return 0;
}
但是我們發(fā)現(xiàn)有問題;
在使用fib 這個(gè)函數(shù)的時(shí)候如果我們要計(jì)算第50個(gè)斐波那契數(shù)字的時(shí)候特別耗費(fèi)時(shí)間。
//求斐波那契數(shù)列(非遞歸)
int get_fib(int n) {
int a = 1;
int b = 1;
int c = 0;
//for (int i = 1; i<= (n - 2); i++) {
// c = a + b;
// a = b;
// b = c;
//}
//while (n >= 3) {
// c = a + b;
// a = b;
// b = c;
// n--;
//}
return c;
}
int main() {
int n = 5;
int fib = get_fib(n);
printf("%d", fib);
return 0;
}
tips
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧