真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言-函數(shù)遞歸(初識(shí))-創(chuàng)新互聯(lián)

MENU
      • 1. 遞歸
      • 2.遞歸的必要條件
      • 3.1 練習(xí):打印一個(gè)整型值(無符號(hào))的每一位
      • 3.2 練習(xí):編寫函數(shù)不允許創(chuàng)建臨時(shí)變量以求字符串的長度
      • 3.3 練習(xí):求n的階乘。
      • 3.4 練習(xí):求第n個(gè)斐波那契數(shù)。

在陸川等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站制作,陸川網(wǎng)站建設(shè)費(fèi)用合理。1. 遞歸

程序調(diào)用自身的編程技巧稱為遞歸( recursion)。
遞歸做為一種算法在程序設(shè)計(jì)語言中廣泛應(yīng)用。 一個(gè)過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,
遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。
遞歸的主要思考方式在于:把大事化小

2.遞歸的必要條件

存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)。
每次遞歸調(diào)用之后越來越接近這個(gè)限制條件。

3.1 練習(xí):打印一個(gè)整型值(無符號(hào))的每一位
//接受一個(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

  1. 許多問題是以遞歸的形式進(jìn)行解釋的,這只是因?yàn)樗确沁f歸的形式更為清晰。
  2. 但是這些問題的迭代實(shí)現(xiàn)往往比遞歸實(shí)現(xiàn)效率更高,雖然代碼的可讀性稍微差些。
  3. 當(dāng)一個(gè)問題相當(dāng)復(fù)雜,難以用迭代實(shí)現(xiàn)時(shí),此時(shí)遞歸實(shí)現(xiàn)的簡潔性便可以補(bǔ)償它所來的運(yùn)行時(shí)開銷。

你是否還在尋找穩(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)查看詳情吧


網(wǎng)站題目:C語言-函數(shù)遞歸(初識(shí))-創(chuàng)新互聯(lián)
文章URL:http://weahome.cn/article/dhoiih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部