Ho questo testo:
Si consideri la successione a1=0 a2=1 a3=2 e per n>3
an=a(n-1)+2*a(n-2)+a(n-3)
Sia dato un array ordinato B di interi di N elementi
con Bi>a3. Scrivere una funzione booleana ricorsiva che
restituisca TRUE se gli N elementi dell'array
rappresentano N elementi consecutivi della successione.
Ho scritto questo codice, ma le modifiche che avvengono sui parametri a1, a2, a3 all'interno di succ vengono perse all'interno di consecutivi e per questo la successione non continua a generarsi correttamente alla successiva chiamata, sapreste indicarmi il perchè?
Grazie mille.codice:#include <cstdlib> #include <iostream> using namespace std; bool consecutivi(int,int,int,int [],int,int); int succ(int &,int &,int &,int,int); int main(){ int b[4]={19,41,88,189}; if(consecutivi(0,1,2,b,4,0)) cout<<"SI"<<endl; else cout<<"NO"<<endl; system("pause"); return 0; } bool consecutivi(int a1,int a2,int a3,int b[],int N,int i){ cout<<"\nCONSECUTIVI "<<a1<<"\t"<<a2<<"\t"<<a3<<endl; if(i>=N) return true; else if(succ(a1,a2,a3,b[i],0)==b[i]) return consecutivi(a1,a2,a3,b,N,i+1); else return false; } int succ(int &a1,int &a2,int &a3,int lim,int somma){ if(a1+(2*a2)+a3>=lim){ int somma=a1+(2*a2)+a3; cout<<"NO"<<somma<<endl; a1=a2; a2=a3; a3=somma; cout<<a1<<"\t"<<a2<<"\t"<<a3<<endl; return somma; } else{ int somma=a1+(2*a2)+a3; cout<<"SI"<<somma<<endl; return succ(a2,a3,somma,lim,somma); } }



Rispondi quotando