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.