共有回帖数 1 个
-
#include stdio.h
// 求数列a(1)=1,a(n)=a(n-1)+2n+1的第n项
// 使用递归的方法
int a(int n)
{
if(n == 1)
// 当n=1时直接反回a(1)
return 1;
// else
// 当n1时通过递推式来求a(n)
return a(n - 1) + n*2 + 1;
}
// 不使用递归的方法
int a2(int n)
{
int i = 0,an = 1;
for(i = 2; i = n; i++)
an = an + i*2 + 1;
return an;
}
int main()
{
int n = 4;
printf("a() returns %d.n",a(n));
printf("a2() returns %d.n",a2(n));
return 0;
}
#include stdio.h
// 对一个数组进行求和
// 使用递归的方法
int sum(int* array,int n)
{
if(n == 1)
// 当要求和的数只有一个时,显然求和结果就是这个数本身
return array[0];
// else
// 当要求和的数不只一个时,先对前面的数求和,再加上最后一个数
return sum(array,n - 1) + array[n - 1];
}
// 不使用递归的方法
int sum2(int* array,int n)
{
int i = 0,v = 0;
for(i = 0; i != n; i++)
v += array;
return v;
}
int main()
{
int array[5] = {2,3,2,6,1};
printf("sum() returns %d.n",sum(array,5));
printf("sum2() returns %d.n",sum2(array,5));
return 0;
}
#include stdio.h
// 求一个数组的最大值
int maxdata(int* array,int n)
{
int v;
if(n == 1)
// 当要求和的数只有一个时,显然它就是最大值了
return array[0];
// else
// 当要求最大值的数不只一个时,先对前面的数求最大值,再与最后一个数比较
// {
v = maxdata(array,n - 1);
return v array[n - 1] ? v : array[n - 1];
// }
}
int maxdata2(int* array,int n)
{
int i = 0;
int maxv = array[0];
for(i = 1; i != n; i++)
maxv = (maxv array) ? maxv : array;
return maxv;
}
int main()
{
int s[4] = {2,5,7,3};
printf("maxdata() returns %dn",maxdata(s,4));
printf("maxdata2() returns %dn",maxdata2(s,4));
return 0;
}
楼主 2016-01-08 10:10 回复
-
#include stdio.h
// 使用递归的选择排序法
// 求数组中最大值出现的位置
int maxp(int* array,int n)
{
int mp;
if(n == 1)
return 0;
mp = maxp(array,n - 1);
return (array[mp] array[n - 1]) ? mp : n - 1;
}
// 交换数组的两个元素
void swap(int* a,int* b)
{
int v = *a;
*a = *b;
*b = v;
}
// 排序
void sort(int* array,int n)
{
int mp;
if(n == 1)
return;
mp = maxp(array,n);
swap(&array[mp],&array[n - 1]);
sort(array,n - 1);
}
int main()
{
int array[5] = {3,5,1,4,2};
sort(array,5);
printf("results: %d %d %d %d %d",array[0],array[1],array[2],array[3],array[4]);
}
1楼 2016-01-08 10:11 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知