Не удается решить задачу с рекурсией
Не получается вычислить по формуле с помощью рекурсии. Формула такая: a1+a1*a2+a1*a2*a3 и так далее. Создаю массив, заполняю его рандомными числами, отображаю его на экране. И затем вызываю функцию, которая должна это все вычислить. Но у меня лишь получилось, чтоб эти числа умножались. А как сделать чтоб они еще и складывались?
Вот мой код:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int ex1(int *, int,int,int);
int main()
{
time_t t; srand(time(&t));
int n=5; //printf("Размер массива: "); scanf("%d",&n);
int *parr = new int[n];
for(int i=0; i<n;i++){
*(parr+i) = rand()%2+1;
}
for(int i=0; i<n;i++){
printf("%3i", *(parr+i));
}
int i=1,g=0;
printf("\n");
int out = ex1(parr,n,i,g);
printf("Out = %d",out);
delete [] parr;
return 0;
}
int ex1(int *arr, int n,int i, int g){
return n!=1 ? *(arr+g)*ex1(arr,n-1,i,g+1): i;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Никакой у вас не С++, а чистый С.
А сделать можно, например, добавив лишний параметр - последнее произведение (первое, что пришло в голову, не скажу, что лучший вариант...)
int sum(int * arr, int n, int * prod)
{
if (n == 0) { *prod = arr[0]; return arr[0]; }
int s = sum(arr,n-1,prod);
*prod *= arr[n];
return s + *prod;
}
int main()
{
int arr[5] = { 1, 2, 4, 3, 1};
int prod;
printf("%d\n", sum(arr,4,&prod));
}
Автор решения: artaxerx
→ Ссылка
Поскольку ваша формула суммы преобразуется так a1 + a1*a2 + a1*a2*a3 = a1 * (1 + a2 * (1 + a3**...), то и функция должна выглядеть как-то так
int ex2(int *arr, int n, int g)
{
return (g == n) ? 0 : (arr[g] * (1 + ex2(arr, n, g + 1)));
}