程序,使用递归查找数组的最小和最大元素

时间:2015-08-25 18:18:07

标签: c arrays recursion conio

我想使用递归找到数组的Maximum和Minimum元素。 这是我写的程序,我已经完成了逻辑,它看起来很完美。但是当我编译程序时,程序在输入后卡住了。

这是我的计划:

displayedFrame

2 个答案:

答案 0 :(得分:3)

您的函数public class Movie { public List<String> title; public List<String> director; public List<DateTime> year; ... } max会导致无限递归。这会导致堆栈溢出。

你有:

min

使用递归方法的麻烦是int max(int a[],int n){ int maxo=0,i=0; if(i<n){ if(maxo < a[i]){ maxo=a[i]; } i++; max(a,n); } return maxo; } 在每次递归调用中都被初始化为i。您使用0这一事实不会影响下一次递归调用中i++的值。同样,i的值在每次递归调用中都设置为maxo

要使递归函数起作用,您需要在递归函数调用中传递0i。类似的东西:

maxo

并使用以下命令调用该函数:

int max(int a[],int n, int i, int maxo){
   if(i<n){
      if(maxo < a[i]){
         maxo=a[i];
      }
      return max(a, n, i+1, maxo);
   }
   return maxo;
}

maxi = max(a, n, 0, a[0]); 的定义和min的调用进行类似的更改。

答案 1 :(得分:2)

代码无限期递送

对OP代码进行了2次更改

#include <limits.h>

int max(int a[],int n){
    //int maxo=0,i=0;
    int maxo=INT_MIN,i=0;  // Initialize maxo to the minimum int
    if(i<n){
        if(maxo < a[i]){
           maxo=a[i];
        }
        i++;
        // max(a,n);  
        // go to next element in the array, decrement array size. 
        // Without eventually reducing the array size, code recurses indefinitely.
        // So here max() works on a 1 smaller array.
        int m = max(a+1,n-1);  
        // save the greater one
        if (m > maxo) maxo = m;
    }
    return maxo;
}

当循环更好时使用递归会给递归带来错误的名称。请考虑以下内容,即每次调用时将数组大小减半。最后,对n的调用仍有大约max()次,但递归深度仅为log2(n)而不是n

int find_max(const int *a, size_t n) {
  if (n <= 1) {
    return (n == 0) ? INT_MIN : a[0];
  }
  int left = find_max(a, n/2);
  int right = find_max(&a[n/2], n - n/2);
  return left > right ? left : right;
}