程序必须在递归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);
}
答案 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)
您将int
传递给int *
,这是错误的,将导致不确定的行为。
即使编译器也警告过相同情况。
warning: passing argument 3 of 'TMax' makes pointer from integer wi thout a cast [-Wint-conversion] TMax(A,N-1,*Max);
您正在访问数组,最大索引为N-1
。
您的基本情况是分配*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
的值