Другие языки программирования и технологии

рекурсия в Си

составить рекурсивную функцию, которая определяет величину Y, как произведение отрицательных элементов массива X, расположенных после первого положительного элемента.
не могу понять в чем ошибка..
int velY(int i)
{
int x[5],k;
int y=1;

if (x>0)
{
k=i;
for (i=k+1;i
Видимо, если сказано массив X, то и должен быть массив X. Нехай будет X.
Таки выше уже правильно заметили, что массив должен быть снаружи функции, а не внутри ее. Вот как здесь:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

// рекурсивная функция вычисления искомого Y
double rec_compY(double *x, double *end, int pf) {
if (x == end) {
return 1;
} else if (pf) {
if (*x < 0) {
return *x * rec_compY(x + 1, end, 1);
}
return rec_compY(x + 1, end, 1);
} else if (*x >= 0) { // -- ноль считаю положительным
return rec_compY(x + 1, end, 1);
}
return rec_compY(x + 1, end, 0);
}

// эта функция вызывает рекурсивную, она определена для удобства
// можно вызывать сразу рекурсивную функцию
double compY(double x[], int size) { return rec_compY(x, x + size, 0); }

// а теперь со всей этой херней мы попробуем взлететь
int main() {
double X[10];
int c;

srand(time(NULL));
for (c = 0; c < 10; ++c) printf(" %0.0f", X[c] = rand() % 101 - 50);

printf("\ncompY(X, 10): %0.0f\n", compY(X, 10));

return 0;
}
Ермек Телеуов
Ермек Телеуов
57 206
Лучший ответ
у вас при каждой итерации создается новый массив Х
Сергей Гусев
Сергей Гусев
20 115
указатель на массив нужно тоже передавать в листе параметров. или, если хотите чтобы заработал именно этот ваш код, сделайте декларацию массива глобальной.
вставь текст как он есть в оригинале.... иначе ниЧего не понятно. .

что значит массив х ???х- итое ???на какой х ты умножаеш у если он изначально не имеет значений и это тоже есть ошибка ???

у тебя ретурн стоит в середине а в конце нет это как ?

в цикле фор большая лажа с ретурном
Juma Gabibov
Juma Gabibov
548