我想使用递归查找数组的最大和最小元素。这是我写的程序,我已经完成了逻辑,它似乎是完美的。但是当我编译程序时,程序在输入后卡住了。
这是我的程序:
#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;
}
Run Code Online (Sandbox Code Playgroud)
你的函数max并min导致无限递归。这会导致堆栈溢出。
你有:
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;
}
Run Code Online (Sandbox Code Playgroud)
使用递归方法的麻烦在于它在每个递归调用中都i被初始化0。您正在使用的i++事实不会影响i下一个递归调用中的值。同样,在每次递归调用中都将 的值maxo设置为0。
要使递归函数工作,您需要传递i和maxo递归函数调用。就像是:
int max(int a[],int n, int i, int maxo){
if(i<n){
if(maxo < a[i]){
maxo=a[i];
}
return max(a, n, i+1, maxo);
}
return maxo;
}
Run Code Online (Sandbox Code Playgroud)
并调用函数:
maxi = max(a, n, 0, a[0]);
Run Code Online (Sandbox Code Playgroud)
对 的定义min和调用进行类似的更改min。
| 归档时间: |
|
| 查看次数: |
6295 次 |
| 最近记录: |