C, trovare minimo array con ricorsione

di
Anonimizzato14377
il
6 risposte

C, trovare minimo array con ricorsione

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

  • Re: C, trovare minimo array con ricorsione

    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.
  • Re: C, trovare minimo array con ricorsione

    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
  • Re: C, trovare minimo array con ricorsione

    If(i == size)
  • Re: C, trovare minimo array con ricorsione

    Funziona.. ma perché?
    Ho messo i+1 perché i parte da zero e scorrendo il vettore, non potrà mai essere uguale a size..
  • Re: C, trovare minimo array con ricorsione

    davide.fruci ha scritto:


    non potrà mai essere uguale a size..
    E infatti, se lo è, esegui il return.
  • Re: C, trovare minimo array con ricorsione

    Capito, ti ringrazio
Devi accedere o registrarti per scrivere nel forum
6 risposte