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);
您将 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];
在这种情况下你的 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=]
程序必须在递归 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);
您将
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];
在这种情况下你的 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=]