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

时间:2018-09-29 10:19:22

标签: c recursion void

程序必须在递归void TMax的帮助下给出数组(A)的最大元素,但它不起作用,我认为由于Max的指针而导致错误,我无法纠正它。请帮我吗?

#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);
}

3 个答案:

答案 0 :(得分:1)

您有几个错误:

在Tmax中:

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

您要测试数组是否为空。然后它没有元素,甚至没有A[0]。请记住,C语言中的数组索引来自0..n-1。也是如此:

    *Max=A[N-1];

以及main中的int k=A[N-1];

在Tmax中,当您递归调用Tmax时,必须传递Max,因为它已经是一个指针,而不是*Max,它是Max中的em>,因此:

    TMax(A,N-1,Max);

答案 1 :(得分:1)

  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];,在这种情况下,您的质量始终为零,因此删除分配并返回。.

示例代码:

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);

答案 2 :(得分:1)

sizeof(A)/ sizeof(A [0])将返回数组的大小。在您的情况下,它将返回5,并且您尝试在 k 中分配数组的 index 5 值,但是在数组索引的起始格式为 0的情况下n-1 ,因此k将包含垃圾值。请尝试适当更改 N

的值