递归查找数组的最大值

时间:2018-06-27 21:51:38

标签: c arrays max

我正在学习递归。作为练习,我试图递归地找到数组的最大值。

int recursive (int *arr, int n, int largest) {
  if(n==0)
    return largest;
  else {
    if (*(arr+n)>largest) {
      largest = *(arr+n);
      recursive(arr, n-1, largest);
    }
  }
}

int main() {
  int length = n-1;
  int largest = v[0];
  int z = recursive(arr, length, largest);

  printf("\n%d", z);
}

我遵循了您的建议,使用指针而不是数组,并且该程序看起来可能更好。但是它仍然没有这样做,没有正确显示最大值。我认为逻辑是正确的。

2 个答案:

答案 0 :(得分:0)

通常在C 中,您无法声明其大小在编译时未知的数组,因此int v[n]是危险代码。
根据您的编译器和编译器的设置,这可能是编译错误,也可能是错误。

对于此类问题,您需要了解指针和dynamic memory allocation

旁注:在C99之后,有类似Variable Length Arrays之类的东西,但是规则有些高级。

对于pass an array to a function,您还可以给数组一个指针作为参数:

int z = recursion(v, n, v[0]);

代替:

int z = recursion(v[n], n, v[0]);

答案 1 :(得分:0)

首先要注意编译器警告,当您输入else部分时,递归函数不会返回值。

现在,第二件事是请不要使用*(arr + n)之类的难以理解的东西,而应使用arr [n],同时在将数组用作函数参数时,仅使用int arr []即可。调用函数而不是int * arr(在第一个版本中,显然应该传递一个数组)。

第三件事是命名您的事物,而不是int recursive描述函数在做什么,例如int maxElemRecursive

因此您的递归函数应该类似于

int maxElemRecursive(int arr[],int n,int largest)
{
    if(n==0) return largest;
    if(arr[n] > largest) // No need for else because return largest; would've returned value;
    {
        largest = arr[n]; 
    }
    return maxElemRecursive(arr,n-1,largest); // You have to return the value of the function.
                                             // You still pass the array with just arr.
}