void SelectionSort(int *a, int n)//选择排序
{
int i,j
int min
int t
for(i = 0i <n-1i ++)
{
int min = i
for(j = i+1j <nj ++)
if(a[min] >a[j])
{
min = j
}
t = a[min]
a[min] = a[i]
a[i] = t
}
}
int binarySearch(int a[],int low,int high ,int x)//递归折半查找
{
int mid
if(low <= high)
{
mid = (low + high)/2
if(x <a[mid])
binarySearch(a,low,high-1,x)
else
if(x >a[mid])
binarySearch(a,low+1,high,x)
else
return mid
}
else
return -1
}
int main(void)
{
int i,j
int x
int a[11]
int index
for(i = 0i <10i++)//输入十个数
scanf("%d",&a[i])
SelectionSort(a,10)//选择法进行升序排列
printf("排序后的数组:")
for(i = 0i <10i++)//输出数组
printf("%d ",a[i])
printf("\n输入要查找的x:")
scanf("%d",&x)
index = binarySearch(a,0,9,x)
if(index != -1)
printf("%d在数组内,下标识index= %d\n",x,index)//x在数组内则输出x的下标
else //若不在,则插入数组中
{
for(i = 0i <10i++)
if(x <a[i])
break
for(j = 9j>=ij--)
{
a[j+1] = a[j]
}
a[j] =x
printf("x插入后的数组为:\n")
for(i = 0i <11i++)//输出插入x后的新数组
printf("%d ",a[i])
}
system("PAUSE")
return 0
}
下面是测试的结果:
测试结果
思路:先通过程序获得阶乘的值,之后再将阶乘相加,求阶乘时和相加时都用递归的写法
首先是求阶乘:
int factorial(int index){
int sum = 0
if (index == 1){
sum = 1
}else{
sum = index * factorial(index-1)
}
return sum
}
之后再求和:
int add_recursion(int maxnum){
int sum = 0
if (maxnum == 1){
sum = factorial(maxnum)
}else{
sum = factorial(maxnum) + add_recursion(maxnum-1)
}
return sum
}
下面是完整的代码:
完整代码
1、在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。 在编程语言中,把直接或间接地调用自身的函数称为递归函数。函数的构建通常需要一个函数或者一个过程来完成。2、递归函数 是建立在嵌套的基础上的,只不过嵌套调用了自己本身,而且经常不是显式调用。一个含直接或间接调用本函数语句的函数被称之为递归函数,它必须满足以下两个条件:
1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
2) 必须有一个终止处理或计算的准则。
例如一个非法的递归(嵌套)调用:
void ff(){
ff()
}
int main()
{
ff()
system("pause")
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)