Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643

    [C] aiutooo ricerca binaria mediante funzione ricorsiva..help me..sono disperato :-(

    Ciao,
    sono disperato, devo fare un esercizio che esegua la ricerca binaria di un valore in un array mediante una funzione ricorsiva...il mio programma si compila ma mi dà strani valori....cos'è che non và? La logica è giusta?

    Io l'ho pensato così:

    1) ho un array ordinato di n element

    2)chiamo la mia funzione passandogli il puntatore al vettore, la chiave da ricercare, l'elemento più basso da cui aprtire e quello più alto dove arrivare)

    3)La funzione essendo ricorsiva ha dei casi base che nel mio caso sono:
    l'elemento è stato trovato e restituisce la posizione nel vettore al chiamante
    l'elemento non è stato trovato e restituisce -1 al chiamante

    4)Se la chiave è maggiore dell'elemento di mezzo invoca nuovamente la funzione passandogli come elemento più basso il vecchio elemento di mezzo + 1 e come elemento più alto il vecchio elemento più alto

    Se la chiave è minore dell'elemento di mezzo invoca nuovamente la funzione passandogli come elemento più basso il vecchio elemento più basso e come elemento di mezzo il vecchi elemento di emzzo-1

    cmq il codice è questo, forse s capisce meglio anche il concetto:

    codice:
    /* Ricerca binaria in un arrya mediante l'uso di una funzione ricorsiva */
    
    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 10
    
    /* La funzione riceve l'indirizzo al primo elemento del vettore, la chiave,
       l'elemento da cui partire, e l'elemento a cui arrivare */
    int binric(int *, int, int, int);
    
    int main(){
        int a[SIZE] = {1,2,3,4,5,6,7,8,9,10};
        int key, risultato;
        
        printf("Inserire un valore da ricercare nell'array: ");
        scanf("d", &key);
        
        risultato = binric(a, key, 0, SIZE-1);
        
        if(risultato == -1)
            printf("L'elemento inserito non è presente nel vettore\n");
        else
            printf("L'elemento inserito si trova nella %d locazione\n", risultato);
        
        system("PAUSE");
        return 0;
    }
    
    int binric(int b[], int chiave, int low, int hight){
        
        int midle;  // Valore di mezzo
        midle = (low+hight)/2;
        
        /* Casi base: se ha trovato la chiave o se non ha trovato la chiav nel
            vettore */
        if(chiave == b[midle])    // elemento trovato
            return midle;
        else if(hight <= low)    // elemento non trovato
            return -1;
        
        /* Se deve continuare la ricerca rinvoca la funzione binric ricorsivamente
           fino al ragiungimento di uno dei due casi base */
           
        else if(chiave >= b[midle])
            binric(b, chiave, midle+1, hight);
        else
            binric(b, chiave, low, midle-1);
    }
    Grazie
    Andrea

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Il concetto è giusto... il codice quasi:
    codice:
    /* Ricerca binaria in un arrya mediante l'uso di una funzione ricorsiva */
    
    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 10
    
    /* La funzione riceve l'indirizzo al primo elemento del vettore, la chiave,
       l'elemento da cui partire, e l'elemento a cui arrivare */
    int binric(int *, int, int, int);
    
    int main(){
        int a[SIZE] = {1,2,3,4,5,6,7,8,9,10};
        int key, risultato;
        
        printf("Inserire un valore da ricercare nell'array: ");
        scanf("%d", &key);
        
        risultato = binric(a, key, 0, SIZE-1);
        
        if(risultato == -1)
            printf("L'elemento inserito non è presente nel vettore\n");
        else
            printf("L'elemento inserito si trova nella %d locazione\n", risultato);
        
        system("PAUSE");
        return 0;
    }
    
    int binric(int b[], int chiave, int low, int hight){
        
        int midle;  // Valore di mezzo
        midle = (low+hight)/2;
        
        /* Casi base: se ha trovato la chiave o se non ha trovato la chiav nel
            vettore */
        if(chiave == b[midle])    // elemento trovato
            return midle;
        else if(hight <= low)    // elemento non trovato
            return -1;
        
        /* Se deve continuare la ricerca rinvoca la funzione binric ricorsivamente
           fino al ragiungimento di uno dei due casi base */
           
        else if(chiave >= b[midle])
            return binric(b, chiave, midle+1, hight);
        else
            return binric(b, chiave, low, midle-1);
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.