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

首頁 > 學院 > 開發設計 > 正文

藍橋杯——遞歸二:典型遞歸模型(2017.2.20)

2019-11-08 01:43:42
字體:
來源:轉載
供稿:網友

1. 遞歸法實現折半查找

源代碼:

法一:

#include <stdio.h>#define maxn 1010int Find(int a[],int k,int low,int high){	int i,mid;	if(low>high)		i=-1;	else	{		mid=(low+high)/2;		if(a[mid]==k)			i=mid;		else if(a[mid]<k)			i=Find(a,k,mid+1,high);		else			i=Find(a,k,low,mid-1);	}	return i;}int main(){	int a[maxn];	int i,n,k;	int low,high,index;	while(scanf("%d",&n)!=EOF)	{		for(i=0;i<n;i++)			scanf("%d",&a[i]);		scanf("%d",&k);		low=0,high=n-1;		index=Find(a,k,low,high);		if(index>=0)			PRintf("%d/n",index+1);		else			printf("Not found!/n");	}	return 0;}法二:

#include <stdio.h>#define maxn 1010void Find(int a[],int k,int low,int high){	int i,mid;	if(low>high)		printf("Not found!/n");	else	{		mid=(low+high)/2;		if(a[mid]==k)			printf("%d/n",mid+1);		else if(a[mid]<k)			Find(a,k,mid+1,high);		else			Find(a,k,low,mid-1);	}}int main(){	int a[maxn];	int i,n,k;	int low,high,index;	while(scanf("%d",&n)!=EOF)	{		for(i=0;i<n;i++)			scanf("%d",&a[i]);		scanf("%d",&k);		low=0,high=n-1;		Find(a,k,low,high);	}	return 0;}程序截圖:

2. 遞歸法求Fibonacci數列的第n項,其中1<=n<=40

源代碼:

#include <stdio.h>#define maxn 1010int fib(int n){	if(n==1 || n==2)		return 1;	else		return fib(n-1)+fib(n-2);}int main(){	int i,n;	while(scanf("%d",&n)!=EOF)		printf("fib(%d)=%d/n",n,fib(n));	return 0;}程序截圖:

3. 漢諾塔問題

源代碼:

#include <stdio.h>int step=0;void print(char x,char y){	printf("%c->%c/n",x,y);	step++; }void move(int n,char s1,char s2,char s3)    //s1-起點 s2-經過的柱 s3-終點 {	int step=0;	if(n==1)		print(s1,s3);	else	{		move(n-1,s1,s3,s2);		print(s1,s3);		move(n-1,s2,s1,s3);	}}int main(){	int n;	while(scanf("%d",&n)!=EOF)	{		move(n,'A','B','C');                //將n個盤子從A柱移到C柱		printf("step=%d/n",step);		step=0;	}	return 0;}程序截圖:

4. 幾種排序算法的遞歸實現

(1)冒泡排序

源代碼:

#include <stdio.h>#include <string.h>#define maxn 1010void bubblesort(int a[],int start,int end){	int i,t;	if(start<=end)	{		for(i=start;i<end;i++)		{			if(a[i]<a[i+1])			{				t=a[i];				a[i]=a[i+1];				a[i+1]=t;			}		}		printf("%d ",a[end]);		end--;		bubblesort(a,start,end);	}}int main(){	int i,n,a[maxn]={0};	int start,end;	while(scanf("%d",&n)!=EOF)	{		for(i=0;i<n;i++)			scanf("%d",&a[i]);		start=0,end=n-1;		bubblesort(a,start,end);		printf("/n");		memset(a,0,sizeof(n));	}	return 0;}程序截圖:

(2)選擇排序

源代碼:

#include <stdio.h>#define maxn 1010void SelectSort(int a[],int start,int end){	int i,j,k;	int t,index;	if(start<end)	{		t=a[start];		index=start;		for(i=start+1;i<end+1;i++)		{			if(a[index]>a[i])				index=i;		}		if(start!=index)		{			t=a[start];			a[start]=a[index];			a[index]=t;		}		start++;		SelectSort(a,start,end);	}}int main(){	int n,a[maxn];	int i,start,end;	while(scanf("%d",&n)!=EOF)	{		for(i=0;i<n;i++)			scanf("%d",&a[i]);		start=0,end=n-1;		SelectSort(a,start,end);		for(i=0;i<n;i++)			printf("%d ",a[i]);		printf("/n");	}	return 0;}程序截圖:

(3)快速排序

源代碼:

#include <stdio.h>#define maxn 1010void Quicksort(int a[],int left,int right){	int i=left,j=right;	int tmp;	if(left<right)	{		tmp=a[left];		while(i!=j)		{			while(j>i && a[j]>=tmp)				j--;			a[i]=a[j];			while(i<j && a[i]<=tmp)				i++;			a[j]=a[i];		}		a[i]=tmp;		Quicksort(a,left,i-1);		Quicksort(a,i+1,right);	}}int main(){	int i,n,left,right;	int a[maxn];	while(scanf("%d",&n)!=EOF)	{		for(i=0;i<n;i++)			scanf("%d",&a[i]);		left=0,right=n-1;		Quicksort(a,left,right);		for(i=0;i<n;i++)			printf("%d ",a[i]);		printf("/n");	}	return 0;}程序截圖:

5. 遞歸打印楊輝三角形

源代碼:

#include <stdio.h>int fun(int x,int y){	if(y==0 || y==x)		return 1;	else		return (fun(x-1,y-1)+fun(x-1,y));}int main(){	int i,j,n;	while(scanf("%d",&n)!=EOF)	{		for(i=0;i<n;i++)		{			for(j=0;j<=i;j++)				printf("%4d",fun(i,j));			printf("/n");		}	}	return 0;}程序截圖:

附各題思路分析及要點整理:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 运城市| 博爱县| 台前县| 海晏县| 红安县| 巴林左旗| 锡林郭勒盟| 盐边县| 西乌| 武清区| 公主岭市| 蕲春县| 东阳市| 樟树市| 界首市| 大港区| 富民县| 五大连池市| 阳江市| 桓仁| 吉安市| 噶尔县| 古交市| 景德镇市| 民乐县| 奉化市| 龙泉市| 湘西| 东乡族自治县| 类乌齐县| 高淳县| 通海县| 杭锦旗| 林芝县| 辽宁省| 清远市| 舞钢市| 兴宁市| 凌云县| 深泽县| 靖江市|