C.The 程序中的递归必须给出数组的最大元素

Recursion in C.The program must give the largest element of an array

程序必须在递归 void 的帮助下给出数组 (A) 的最大元素 TMax.But 这不是 working.I 认为由于 Max 的指针而出现错误,我可以'不正确 it.Can 你帮帮我好吗?

#include <stdio.h>
#include <stdlib.h>

void TMax(int A[], int N,int *Max)
{
    if(N==0){
       *Max=A[0];
    }
    else
    {
        *Max=A[N];
         if(A[N]>*Max)
        {
            *Max=A[N];
        }
         TMax(A,N-1,*Max);
    }
}

int main()
{
    int A[] = { 1, 2, 999, 4, 20};
    int N = sizeof(A) / sizeof(A[0]);
    int k=A[N];

   TMax(A,N,&k);

    printf("%d",k);
}

您有几个错误:

最高温度:

    if(N==0){
       *Max=A[0];
    }

您想测试数组是否为空。然后它有 no 个元素,甚至 A[0] 也不存在。请记住,C 中的数组索引从 0..n-1 开始。还有:

    *Max=A[N-1];

并且在 main 中也是:int k=A[N-1];

在 Tmax 中,当你递归调用 Tmax 时,你必须传递 Max,因为它已经是一个指针,而不是 *Max,后者将是 [=31= Max 的 ] 值,因此:

    TMax(A,N-1,Max);
  1. 您将 int 传递给 int * 这是错误的,会导致未定义的行为。

    甚至编译器也会发出警告。

    warning: passing argument 3 of 'TMax' makes pointer from integer wi
    thout a cast [-Wint-conversion]
              TMax(A,N-1,*Max);
    
  2. 您正在越界访问数组,最大索引为 N-1

  3. 你的基本情况正在分配 *Max=A[0]; 在这种情况下你的 mas 将始终为零因此删除分配并且只是 return..

示例代码:

void TMax(int A[], int N,int *Max)
{
    if(N==0){
       return;
    }
    else
    {
        if(A[N]>*Max)
        {
            *Max=A[N];
        }
         TMax(A,N-1,Max);
    }
}

main 你这样调用。

TMax(A,N-1,&k);

sizeof(A) / sizeof(A[0]) 将 return 你的数组大小。在您的情况下,它将变为 return 5 并且您正在尝试在 k 中分配数组的 index 5 值,但在这种情况下数组索引开始形式 0 到 n-1 所以 k 将包含垃圾值。尝试对 N[ 的值进行适当的更改=10=]