国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

遞歸算法及經典遞歸例子代碼實現

2019-10-29 21:31:08
字體:
來源:轉載
供稿:網友

遞歸(recursion):程序調用自身的編程技巧。

  遞歸滿足2個條件:

    1)有反復執行的過程(調用自身)

    2)有跳出反復執行過程的條件(遞歸出口)

 

遞歸例子:

(1)階乘

         n! = n * (n-1) * (n-2) * ...* 1(n>0)

//階乘int recursive(int i){	int sum = 0;	if (0 == i)		return (1);	else		sum = i * recursive(i-1);	return sum;}

(2)河內塔問題

遞歸算法,經典遞歸

//河內塔void hanoi(int n,int p1,int p2,int p3){	if(1==n)		cout<<"盤子從"<<p1<<"移到"<<p3<<endl;	else	{		hanoi(n-1,p1,p3,p2);		cout<<"盤子從"<<p1<<"移到"<<p3<<endl;		hanoi(n-1,p2,p1,p3);	}}

3)全排列

  從n個不同元素中任取mm≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當m=n時所有的排列情況叫全排列。

  如1,2,3三個元素的全排列為:

  1,2,3

  1,3,2

  2,1,3

  2,3,1

  3,1,2

  3,2,1 

//全排列inline void Swap(int &a,int &b){	int temp=a;	a=b;	b=temp;}void Perm(int list[],int k,int m){	if (k == m-1) 	{		for(int i=0;i<m;i++)		{			printf("%d",list[i]);		}		printf("n");	}	else	{		for(int i=k;i<m;i++)		{			Swap(list[k],list[i]); 			Perm(list,k+1,m);			Swap(list[k],list[i]); 		}	}}

(4)斐波那契數列

  斐波納契數列,又稱黃金分割數列,指的是這樣一個數列:11、2、35、8、13、21、……

  這個數列從第三項開始,每一項都等于前兩項之和。

  有趣的兔子問題:

遞歸算法,經典遞歸

 

  一般而言,兔子在出生兩個月后,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那么一年以后可以繁殖多少對兔子?

  分析如下:

  第一個月小兔子沒有繁殖能力,所以還是一對;

  兩個月后,生下一對小兔子,總數共有兩對;

  三個月以后,老兔子又生下一對,因為小兔子還沒有繁殖能力,總數共是三對;

  …… 

  依次類推可以列出下表:

遞歸算法,經典遞歸

//斐波那契
long Fib(int n)
{
 if (n == 0) 
  return 0;
 if (n == 1) 
  return 1;
 if (n > 1) 
  return Fib(n-1) + Fib(n-2);
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韩城市| 黎平县| 公主岭市| 郁南县| 崇义县| 天长市| 元氏县| 邵阳县| 蓝山县| 乌鲁木齐市| 黑龙江省| 霍邱县| 永寿县| 甘泉县| 迭部县| 镇远县| 江永县| 农安县| 滦南县| 江安县| 昌邑市| 嵊州市| 南皮县| 绥滨县| 留坝县| 彩票| 淅川县| 玛多县| 朝阳县| 新野县| 洛扎县| 利辛县| 乌兰察布市| 志丹县| 专栏| 韩城市| 和平区| 泉州市| 观塘区| 察哈| 大名县|