Итог исследования1
)не получился никакой вариант рекурсивного вычисления одновременно в одной функции и члена последовательности и суммы. (ниже один из неверных вариантов)
double iter(double a, double b,double x0,double x1,int N,int i,double *X)
{ //восходящая рекурсия
double x2,sum;
x2=a*x1+b*x0;
if (i==N){
*X=x2;
sum+=x2;
return sum;
}
else {
x0=x1;x1=x2 ;
[b]sum+=iter(a,b,x0,x1,N,i+1,X);[/b]
//sum+=*X;
return sum;
};
}
2)правильный вариант получился с разбиением вычисления элемента и суммы на 2 функции (наполовину взаимная рекурсия) ниже
=====================================================
void iterX(double a, double b,double x0,double x1,int N,int i,double *X)
{ //восходящая рекурсия
double x2=a*x1+b*x0;
if (i==N)
{*X=x2; return;}
else {
x0=x1;x1=x2 ;
[b] iterX(a,b,x0,x1,N,i+1,X);[/b]
};
}
[b]void iterS(double a, double b,double x0,double x1,int N,int i,double *sum)[/b]
{ //восходящая рекурсия
double x,x2=a*x1+b*x0;
if (i==N)
{*sum+=x2; return;}
else {
[b] iterX(a,b,x0,x1,N,i,&x);[/b]
(*sum)+=x;
[b] iterS(a,b,x0,x1,N,i+1,sum);[/b]
};
}
//вызов
iterX(a,b,x0,x1,n,2,&x);
printf("x[%i]=%f\n\n",n,x);
Sum=0;
iterS(a,b,x0,x1,n,2,&Sum);
Sum+=x0+x1;
printf("S[%i]=%f\n\n",n,Sum);