Originariamente inviato da Skull260287
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è?
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);
}
}
Grazie mille.