Найти произведение отрицательных элементов массива, используя рекурсию - C (СИ)
Формулировка задачи:
составить рекурсивную функцию, которая определяет величину Y, как произведение отрицательных элементов массива X, расположенных после первого положительного элемента.
не могу понять в чем ошибка..
int velY(int i)
{
int x[5],k;
int y=1;
if (x>0)
{
k=i;
for (i=k+1;i<5;i++)
{
if (x<0)
y=y*x;
return y;
}
}
else velY(i+1);
printf("]",y);
_getch();
}Решение задачи: «Найти произведение отрицательных элементов массива, используя рекурсию»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
int g_mul = 1;
bool b = false;
void mulY(int i, int* X, int n)
{
if (i >= n) return;
if (X[i] > 0) { b = true; ++i; }
g_mul*=(b != false && X[i] < 0) ? X[i] : 1;
mulY(++i, X, 10);
}
int main()
{
int X[10] = { -3, 5, 6, -7, -2, -9, -8, -3, 4, 0 };
mulY(0, X, 10);
printf("mul = %d\n",g_mul);
_getch();
return 0;
}
Объяснение кода листинга программы
В данном коде на языке C реализована функция mulY, которая рекурсивно перебирает элементы массива X. Если элемент больше нуля, то переменная b устанавливается в true и происходит переход к следующему элементу. Если элемент меньше нуля, то его значение умножается на переменную g_mul. После чего рекурсия продолжается до тех пор, пока не будет достигнут последний элемент массива. В функции main создается массив X, инициализированный отрицательными и нулевыми значениями. Затем вызывается функция mulY, передавая в нее первый элемент массива X и его размер. После выполнения всех операций, значение переменной g_mul выводится на экран. Коды функций и переменные:
-
include
-
include
- int g_mul = 1;
- bool b = false;
- void mulY(int i, int* X, int n)
- {
- if (i >= n) return;
- if (X[i] > 0) { b = true; ++i; }
- g_mul*=(b != false && X[i] < 0) ? X[i] : 1;
- mulY(++i, X, 10);
- }
- int main()
- {
- int X[10] = { -3, 5, 6, -7, -2, -9, -8, -3, 4, 0 };
- mulY(0, X, 10);
- printf(
mul = %d\n,g_mul); - _getch();
- return 0;
- }