《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-7(question?)

【例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();
}


     本程序运行结果如下图所示

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值