我必须编写一个C代码,使用递归查找数组中的最小值。我已经使用for循环完成了它,但递归比较棘手。有人能帮助我吗?
答案 0 :(得分:4)
单个项目数组的最小值是单个项目(基本情况或终止条件)。
数组的最小值是[第一项,最小值(不包括第一项)的最小值]
答案 1 :(得分:1)
#include <stdio.h>
int minimum(int *a_s, int *a_e, int candidate){
if(a_s == a_e)
return candidate;
return minimum(a_s+1, a_e, *a_s < candidate ? *a_s : candidate);
}
int main(void){
int array[] = { 1,3,-2,0,-1};
printf("%d ", minimum(array+1, &array[sizeof(array)/sizeof(*array)], *array));
return 0;
}
答案 2 :(得分:1)
以下是使用递归查找最小值的简单代码,
int rec(int a[],int n)
{
int min;
if(n==1)
return a[0];
else {
min=rec(a,n-1);
if(min<a[n-1])
return min;
else
return a[n-1];
}
}
void main()
{
int i,j,n,a[20];
printf("enter n :");
scanf("%d",&n);
printf("enter values : ");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("\n%d",rec(a,n));
getch();
}
答案 3 :(得分:1)
接受回答后。
下面是一个不会咀嚼堆栈的递归解决方案。估计最大堆栈深度为O(ln2(n))。其他解决方案看起来最大堆栈深度为O(n)。
int ArrayMin(const int a[], size_t n) {
if (n <= 1) {
if (n < 0) return 0; // Handle degenerate ArrayMin( ,0)
return a[0];
}
size_t nhalf = n / 2;
int left = ArrayMin(a, nhalf);
int right = ArrayMin(&a[nhalf], n - nhalf);
return left < right ? left : right;
}
9小时后回答,我们可以假设作业截止日期已过去。
答案 4 :(得分:0)
试试这段代码 -
#include<stdio.h>
int min;
int arrfun(int *arr,int n)
{
if(n){
if(*arr < min) // check any no is less than minimum.
min = *arr; // if yes assign it
}
else
return min; // when n becomes 0 it returns the minimum element
arrfun(++arr,--n); // recursive call
}
int main()
{
int arr[]={7,3,9,2,1,6};
min = arr[0]; // Taking first element is minimum
printf("minimum is: %d\n",arrfun(arr,6)); // call the function by passing address and no of elements in array
return 0;
}