Hallo Ich habe den folgenden CodeAusführungsalgorithmus rekursiv niedrigere Zahl zu suchen, ist sehr langsam
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define min(x, y)(x < y)?(x):(y)
#define SIZE 1000
int valormenor(int a[], int n)
{
if(n == 1)
return a[0];
else
return min(a[0], valormenor(a + 1, n - 1));
}
int main(void)
{
int arr[SIZE] = {0}, i;
srand (time (NULL));
for(i = 0; i < SIZE; i++)
arr[i] = rand() % SIZE;
arr[5] = -1;
printf("%d\n", valormenor(arr, SIZE));
return 0;
}
Der Punkt, dass nicht verstehen ist, weil es zu lange dauert die kleinste Zahl zu finden, meine Theorie ist, dass diese rekursive Funktion ist schlecht umgesetzt, Sie behaupten?
Wie langsam ist "sehr langsam"? Aber natürlich haben Sie Recht damit, dass dies ein unglaublich langsamer Weg ist, den minimalen Wert in einem Array zu finden, verglichen mit einer einfachen Schleife, wegen all dem unnötigen Overhead. –
@romkyns können Sie erklären, warum diese Funktion ineffizient ist – Kevin
Ihr Algorithmus ist O (n) ² – xsami