问题一
问题描述:
编写一个简单的用递归求一个数组的和。
线性递归版:
// 递归实现数组求和
#include <stdio.h>
int sum(int A[], int n)
{
if (n < 1) //递归出口
return 0; //下标为0
else
return sum(A,n-1) + A[n-1];
}
int main()
{
int n = 3;
int A[3] = {1,2,3};
printf("%d\n",sum(A, n));
return 0;
}
运行结果:
6
--------------------------------
Process exited with return value 0
Press any key to continue . . .
二分递归版:
// 数组求和 (二分递归版)
#include <stdio.h>
int sum(int A[],int lo,int hi)
{
if (lo == hi)
return A[lo];
else
{
int mi = (lo +hi)>>1; //以居中单元为界,一分为二
return sum(A,lo,mi)+sum(A,mi+1,hi);
}
}
int main()
{
int A[5] = {1,2,3,4,5};
printf("%d\n",sum(A,0,4));
return 0;
}
运行