Vreau un mod de rezolvare pentru problema 3, subiectul III, sesiunea specială 2019, limbajul C/C++. Nu mai stiu cum sa construiesc functia recursiva, sau cel putin nu pe asta...
Mulțumesc anticipat.

Răspunsuri la întrebare
Răspuns:
propun două variante... prima, cu vector, (fără recursie) ce lucrează foarte repede şi memoria nu e atît de ocupată cu 10000 de elemente în vctor...
A doua variantă, cu recursie, care pentru n mai mare ca 30 âncepe să gâfâie, ia foarte mult timp, deoarece fiecare apel a funcţiei recursive aduce după sine încă 3 apeluri...
Eu îi dau prioritate primei variante...
Explicație:
************** varianta cu vector (nerecursivă) ************
#include <iostream>
#include <fstream>
using namespace std;
ofstream g ("bac.txt");
int n,x,y,z,v[10001],i;
int main()
{
cout << "n= "; cin >> n;
cout << "x= "; cin >> x;
cout << "y= "; cin >> y;
cout << "z= "; cin >> z;
v[0]=x; v[1]=y; v[2]=z;
for (i=3; i<n; ++i)
{
v[i]=v[i-1]+v[i-2]-v[i-3];
}
for (i=n-1; i>=0; --i)
g << v[i] << " ";
}
************ varianta recursivă ************
#include <iostream>
#include <fstream>
using namespace std;
ofstream g("bac.txt");
int n,x,y,z;
int f(int n)
{
if (n==1) { return x; }
else
{
if (n==2) { return y;}
else
{
if (n==3) { return z;}
else return f(n-1)+f(n-2)-f(n-3);
}
}
}
int main()
{
cout << "n= "; cin >> n;
cout << "x= "; cin >> x;
cout << "y= "; cin >> y;
cout << "z= "; cin >> z;
if (n==1) g << x;
else
{
if (n==2) g << y << " " << x ;
else
{
if (n==3) g << z << " " << y << " " << x;
else
{
for (int i=n; i>3; --i)
g << f(i) << " ";
g << z << " " << y << " " << x;
}
}
}
}
prima progresie e pentru indici impari, a doua - pentru indici pari