【例10-7】用递归方法编写一个程序,返回整型数组array中的最大值。数组array中的元素互不相等。
【分析】
要得到一个数组中的最大值最常见的方法是通过一个循环操作遍历数组中的元素,从而筛选出最大的元素。但是应用递归的方法也是一种很好的选择,因为寻找最大元素的过程本身具有递归特性。可以这样描述在一个数组中寻找最大元素的过程:
(1)如果该数组中只有一个元素,那么该元素就是最大的值,因此将其返回。
(2)如果该数组中的元素个数大于1,那么将该数组中的第一个元素与后面其他元素中最大值进行比较。如果第一个元素大于后面其他元素中的最大值,则返回第一个元素,否则返回后面其他元素中的最大值。
那么计算“后面其他元素中的最大值”的过程又是重复执行(1)、(2)的过程,因此可以递归调用这个过程。其算法描述如下:
int arrayMaxVal(int array[],int n)
{
if(n == 1) return array[0];
if (array[0]>=arrayMaxVal(array+1,n-1))
return array[0];
else
return arrayMaxVal(array+1,n-1);
}
函数arrayMaxVal()的作用是返回数组arraya中的最大值,参数n标志着数组arraya中元素的个数。首先判断n是否等于1,如果n等于1表示当前数组中只有1个元素,因此返回array[0];否则比较array[0]arrayMaxVal(array+1,n-1)的大小,并返回其中较大的值。arrayMaxVal(array+1,n-1)是递归调用函数arrayMaxVal()的过程,它返回当前数组中除第一个元素外,后面其他元素中的最大值。
下面给出完整的测试程序,程序清单10-7
#include <stdio.h>
int arrayMaxVal(int array[],int n)
{
if(n == 1) return array[0];
if (array[0]>=arrayMaxVal(array+1,n-1))
return array[0];
else
return arrayMaxVal(array+1,n-1);
}
main()
{
int array[]={1,2,13,11,7,9,3},max;
max = arrayMaxVal(array,7);
printf("The max elem in the array is %d\n",max);
getche();
}
本程序运行结果如下图所示