【发布时间】:2015-11-19 14:04:04
【问题描述】:
我想使用递归找到数组的最大值和最小值。 这是我编写的程序,我已经完成了逻辑,它似乎很完美。但是当我编译程序时,程序在输入后卡住了。
这是我的程序:
#include<stdio.h>
#include<conio.h>
int max(int a[], int n);
int min(int a[], int n);
void main(){
int a[100],n,i,maxi,mini;
clrscr();
printf("Enter the number of elements ");
scanf("%d",&n);
printf("Enter the elements of array ");
for(i=0;i<n;i++)
{
scanf("%d \n",&a[i]);
}
maxi = max(a,n);
mini = min(a,n);
printf("\nMaximum element : %d",maxi);
printf("\nMinimum element : %d",mini);
getch();
}
int max(int a[],int n){
int maxo=0,i=0;
if(i<n){
if(maxo < a[i]){
maxo=a[i];
}
i++;
max(a,n);
}
return maxo;
}
int min(int a[],int n){
int mino=999,i=0;
if(i<n){
if(mino > a[i]){
mino=a[i];
}
i++;
min(a,n);
}
return mino;
}
【问题讨论】:
-
这是一个相当奇怪的循环/recusrion 混合体。如果你想递归,你应该递归大小不断减小的数组,并有一个数组只有一个元素的基本情况。否则你将永远递归。
-
未成年人:建议
#include <limits.h>maxo=INT_MIN和int mino=INT_MAX -
程序是在编译阶段还是在执行阶段“卡住”了?这个问题在这个细节上似乎有点含糊。
-
头文件:conio.h 不可移植(在 Visual Studio/Windows 之外不可用)强烈建议不要使用该头文件。标准 C 库中提供了更好的系统函数
-
@user3629249 OP 发布“但是当我编译程序时,程序在输入后卡住了。”对我来说听起来像是一个运行时问题。