Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [C++] Funzione ricorsiva: somma pari-dispari

    Ho un problema con la seguente funzione.. non riesco a capire cosa c'è che non va.. mi stampa sempre false...

    Ecco la specifica:
    una funzione ricorsiva che riceva un array di numeri interi e la sua dimensione e restituisca TRUE se le somme di due interi consecutivi nell’array sono alternatamente una pari ed una dispari, ossia comunque si prenda un intero x nell’array, se la somma di x con l’intero che lo precede è pari (risp. dispari), la somma di x con l’intero che lo segue deve essere dispari (risp. pari). Esempio: la funzione invocata su un array contenente la sequenza di interi 1 3 2 6 3 3 2 dovrà restituire TRUE. Infatti le somme degli interi consecutivi sono 1+3 - pari, 3+2 – dispari, 2+6 – pari, 6+3 – dispari, 3+3 – pari, 3+2 – dispari.


    codice:
    #include <iostream>
    using namespace std;
    
    bool ricorsiva(int v[], int dim, int i);
    
    int main(){
        
        int i=0;
        const int dim=7;
        int v[dim]={1,3,2,6,3,3,2};
        if(ricorsiva(v,dim,i)){
                               cout<<"ok"<<endl;
                               }
    
        else{
    
                              cout<<"no"<<endl;
                              }
                                  
    system("pause");
    return 0;
        
    }
    
    bool ricorsiva(int v[], int dim, int i){
         if(i==dim-3)
         return true;
         
         
         if(v[i] + v[i+1] % 2 == 0 && v[i+1] + v[i+2] % 2 == 0) 
         return false;
         
         if(v[i] + v[i+1] % 2 != 0 && v[i+1] + v[i+2] % 2 != 0)
         return false;
        
         return ricorsiva(v,dim,i++);   
    }

  2. #2
    Utente di HTML.it L'avatar di marty89
    Registrato dal
    Apr 2011
    Messaggi
    107
    Hai soltanto fatto un errore quando richiami la funzione ricorsiva, perché non devi passare i++ ma ++i oppure i+=1.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    non va bene ugualmente!! mi restituisce true soltanto se modifico il caso base con if(i==0) perchè chiaramente la i parte da 0..
    Il problema secondo me è proprio sull'if del passo base..
    Non dovrebbe essere tipo: finche non scorro tutto l'array?

  4. #4
    Utente di HTML.it L'avatar di marty89
    Registrato dal
    Apr 2011
    Messaggi
    107
    Devi mettere le parentesi quando controlli se la somma dei valori dell'array è pari o dispari, perché altrimenti il modulo ha la precedenza sulla somma. Modifica quei controlli in questo modo:
    codice:
    if((v[i] + v[i+1]) % 2 == 0 && (v[i+1] + v[i+2]) % 2 == 0) 
         return false;
         
    if((v[i] + v[i+1]) % 2 != 0 && (v[i+1] + v[i+2]) % 2 != 0)
         return false;

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.