int i = 0;
int min = x[i];
while ( i < n ){
if ( x[i] < min ){
min = x[i];
}
i++;
}
return min;
我已经写了用迭代的形式寻找数组最小数字的方法。但是我想写一个递归函数来完成这个任务。请帮忙!
int i = 0;
int min = x[i];
while ( i < n ){
if ( x[i] < min ){
min = x[i];
}
i++;
}
return min;
int minimum(int array[], int size) {
if (size == 1) {
return array[0];
}
else {
return (array[size] < minimum(array, size - 1))
? array[size]
: minimum(array, size - 1);
}
}
int array[5] = {5, 99, 205, 1, 15};
int smallest = minimum(array, 4); // 4 = index of the last element
我的练习规则:
单元素数组的最小值就是这个数组中唯一的那个数。
长度大于1的数组的最小值是第一个元素和剩余元素中的最小值中更小的那个。
(空数组没有定义最小值。)
听起来像是作业,但你最好的选择是这样的:
int main(void) {
int size = 2;
int test[] = {0,1};
int min = test[0];
findMin(&min, test, size);
printf("%d", min);
}
void findMin(int* min, int* test, int* length);
void findMin(int* min, int* test, int* length) {
if (length >= 0) {
if (*test < *min) {
*min = test;
}
findMin(min, test++, (*length)--);
}
}
#include <stddef.h>
int *recursiveMin(int *x, int n) {
if (x == NULL || n == 0)
return NULL;
if (n == 1)
return x;
int *t = recursiveMin(x + 1, n - 1);
return *x < *t ? x : t;
}
min( array ) {
if size of array == 1 return array[0]
else if size of array == 2 return array[0] < array[1] ? array[0] : array[1]
else {
firstmin = min( firsthalf) // stored to avoid double calls
secondmin = min( secondhalf)
firstmin < second_min ? firstmin : secondmin
}
}
为了进一步优化:#include <iostream>
#include <cstdlib>
using namespace std;
int min(int [], int);
void mostrar(int [], int);
int main() {
int f[] = {4, 9, 0, -1, 5, 8, -3, 6, -4, 0};
int t = sizeof(f)/sizeof(int);
cout << "\nEl valor m\xa1nimo para los valores:\n";
mostrar(f, t);
cout << "\nes: " << min(f, t);
system("pause>nul");
}
int min(int x[], int p) {
if (p == 1)
return x[0];
int aux = min(x+1, p-1);
return x[0] < aux ? x[0] : aux;
}
void mostrar(int v[], int k) {
if (k > 1)
mostrar(v, k-1);
cout << v[k-1] << " ";
}
这是伪代码
ALGORITHM Unknown (A[0,...,n-1] )
if n=1 then
return A[0]
else
temp<- Unknown (A[0,...,n-2] )
if temp<= A[n-1] then
return temp
else return A[n-1]
public int arrayMinValue(int[] array){
if(array.length == 1)
return array[0];
else
{
int valor = array[array.length-1];
int[] newArray = Arrays.copyOf(array, array.length-1);
Integer mun = arrayMinValue(newArray);
return mun <= valor? mun : valor;
}
}
尝试:
int recursive_min(list<int> arr) {
return recursive_min(arr);
}
虽然这在命令式语言中不起作用。
更严肃的答案是,以伪代码形式:
func recursive_min( list l ) {
head = l[1]
tail = l[2<->end]
if l.length==1 return head else return min(head,recursive_min(tail))
}
虽然如果 l 为空则无法运行。