C, trovare minimo array con ricorsione

di Anonimizzato14377 il
6 risposte
Dato un file di testo, devo memorizzarne i valori interi, in un vettore di dimensione opportuna. Poi di questo array devo trovarne il minimo attraverso una funzione ricorsiva.

Non mi da errori in compilazione, ma non funziona correttamente
#include <stdio.h>
#include <stdlib.h>

int* leggi_array(const char* nomefile, int* n);

int minimo(int* array, int size);

int minimoDiRic(int vett[], int size, int minimo, int i);


int main()
{
    char* nomefile = "file1.txt";
    int size = 0;
    
    int* v = leggi_array(nomefile, &size);
    
    printf("v = ");
    int i;
    for(i = 0; i < size; i++)
	printf("[%d]", v[i]);
    printf("\n");
    
    minimo(v, size);
    
}

int* leggi_array(const char* nomefile, int* n)
{
	FILE *f  = fopen(nomefile,"r");
	if(f == NULL)
	{
		printf("Errore apertura file\n");
		exit(1);
	}
	int *v, el, i = 0;

	while(fscanf(f, "%d", &el) != EOF)
		(*n)++;
	fseek(f, 0, 0);
	v = (int*) malloc ((*n) * sizeof(int));
	while(fscanf(f, "%d", &el) != EOF)
	{
		v[i] = el;
		i++;
	}
		
	printf("*n = %d\n", (*n));
	return v;
}


int minimo(int* array, int size)
{
	int i = 0, mini = array[i], res;
	printf("minimo: %d\n", minimoDiRic(array, size, mini, i));
	
}

int minimoDiRic(int vett[], int size, int minimo, int i)
{
	if(i+1 == size)
		return minimo;
	if(vett[i] < minimo)
		minimo = vett[i];
	minimoDiRic(vett, size, minimo, ++i);
}

6 Risposte

  • Intanto la funzione minimo dovrebbe restituire un int ma non lo fa (se non deve restituire nulla deve essere void).

    Poi dovresti dire in quali condizioni (con quali dati) non funziona correttamente per poter provare.
  • oregon ha scritto:


    Intanto la funzione minimo dovrebbe restituire un int ma non lo fa (se non deve restituire nulla deve essere void).
    Hai ragione, ho avuto una svista.

    oregon ha scritto:


    Poi dovresti dire in quali condizioni (con quali dati) non funziona correttamente per poter provare.
    Il file txt è:
    34 4 522 334 2
    Stampa:

    *n = 5
    v = [34][4][522][334][2]
    minimo: 4
  • If(i == size)
  • Funziona.. ma perché?
    Ho messo i+1 perché i parte da zero e scorrendo il vettore, non potrà mai essere uguale a size..
  • davide.fruci ha scritto:


    non potrà mai essere uguale a size..
    E infatti, se lo è, esegui il return.
  • Capito, ti ringrazio
Devi accedere o registrarti per scrivere nel forum
6 risposte