View Single Post
Old 22-11-2011, 20:29   #1
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
[C++] funzione ricorsiva che verifica sovrapponibilità

ho un esercizio:
dato un array v[] con dimensione N, si verifichi se l'array è ripiegabile su se stesso con passo pari a 3.
Per ripiegatura si intende: i primi tre numeri devono essere uguali ai secondi 3 numeri capovolti(cioè leggendoli in modo inverso..in modo palindromo diciamo: ad esempio 123 è uguale a 321).
ad esempio avendo l'array: 1,2,3,3,2,1,2,4,6,12,8,4 di dimensione 12
la ripiegatura è possibile perchè 123 è uguale a 321. Dalla loro sovrapposizione si creerà una nuova terna sommando 1+1,2+2 e 3+3 e si forma la nuova terna cioè 6,4,2
quindi ora la ripiegatura va fatta con la nuova terna e l'array diventa:
6,4,2,2,4,6,12,8,4.. stesso discorso di prima....
quando si arriva ad avere solo 3 numeri non è possibile piu ripiegatura e quindi la funzione termina stampando questi ultimi 3 numeri.

A me non funzione, ma non capisco il perchè:
Codice:
#include <iostream>
using namespace std;

bool ricorsiva(int v[], int dim, int i, int k, int sommaA, int sommaB, int sommaC);

int main(){
 const int dim=12; 
 int i=0,k=0, sommaA=0, sommaB=0, sommaC=0;
 int v[dim]={1,2,3,3,2,1,2,4,6,12,8,4};
 
 if(ricorsiva(v,dim,i,k,sommaA,sommaB,sommaC))
    for(int i=0; i<dim; i++)
            cout<<v[i]<<endl;
 else
     cout<<"non sovrapponibile"<<endl;
     
 system("pause");       
return 0;
}

bool ricorsiva(int v[], int dim, int i, int k, int sommaA, int sommaB, int sommaC){
     
     if(i%3!=0)
     return false;
     
     if(i==dim-3)
     return true;
     
     sommaA=v[i], sommaB=v[i+1], sommaC=v[i+2];
     
     if(sommaA != v[k] || sommaB != v[k-1] || sommaC != v[k-2])
     
     ricorsiva(v,dim,i+3,k+3,v[i],v[i+1],v[i+2]);
}
mistergks è offline   Rispondi citando il messaggio o parte di esso