关于递归函数的认识叙述

关于递归函数的认识叙述

1.当递归函数中,只有一种递归时(一种递归即指一个因式),比较容易理解,比如计算N!(N的阶乘)
在数学计算中应该是N!=1234…N;而在计算机c语言中应该表示为
void function(int n)(子函数)
{
if(n==1)
return 1;
else
return n
function(n-1);
}
/计算的详细过程应该是:
当N=5时 就是5
(function(5-1));
5
4*(function(4-1));
543*(function(3-1));
5432(function(2-1));而此时function(1)==1,即返回function(1)=1,得到 5 * 432*1,即得结果。
2.当递归函数中,不止一种递归时,比如合并排序的使用
#include<stdio.h>
#define N 100
int merge(int *a, int left,int mid,int right)
{
int i,j,k=0;
int b[N]={0};
i=left;
j=mid+1;
while(i<=mid&&j<=right) /把两个序列中小的部分先输入到中间数组/
{
if(a[i]<a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=mid) /没有输完的序列剩下的依次输入到中间数组/
b[k++]=a[i++];
while(j<=right)
b[k++]=a[j++];
for(i=0;i<k;i++) /将排序好的出处在中间数组里的序列输入到a数组/
a[left++]=b[i];
return 0;
}
int mergesort(int a,int left,int right) /将序列划分为等大的两部分再调用排序/
{
int i,j,mid;
if(right-left>=1)
{
mid=(left+right)/2;
mergesort(a,left,mid);
mergesort(a,mid+1,right);
merge(a,left,mid,right); /调用排序/
}
return 0;
}
int main()
{
int a[N]={0},i,n;
printf(“please input the length of the list:\n”);
scanf("%d",&n);
printf(“please input the number of the list:\n”);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
mergesort(a,0,n-1);
printf(“the sort of the list is :\n”);
for(i=0;i<n;i++)
printf("%d “,a[i]);
printf(”\n");
return 0;
}(此代码转载于一位CSDN博主,仅用于借鉴)
在分的过程中,针对于这三个调用
mergesort(a,left,mid);//1
mergesort(a,mid+1,right);//2
merge(a,left,mid,right); /
//3
应该是先完成第一个的调用,直到第一个left=mid时,再进行第二个的调用,也当满足left=mid时,再进行第三个的调用(第三个是合并排序)。

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/87909543