составить рекурсивную функцию, которая определяет величину 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;
}
Таки выше уже правильно заметили, что массив должен быть снаружи функции, а не внутри ее. Вот как здесь:
#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;
}
у вас при каждой итерации создается новый массив Х
указатель на массив нужно тоже передавать в листе параметров. или, если хотите чтобы заработал именно этот ваш код, сделайте декларацию массива глобальной.
вставь текст как он есть в оригинале.... иначе ниЧего не понятно. .
что значит массив х ???х- итое ???на какой х ты умножаеш у если он изначально не имеет значений и это тоже есть ошибка ???
у тебя ретурн стоит в середине а в конце нет это как ?
в цикле фор большая лажа с ретурном
что значит массив х ???х- итое ???на какой х ты умножаеш у если он изначально не имеет значений и это тоже есть ошибка ???
у тебя ретурн стоит в середине а в конце нет это как ?
в цикле фор большая лажа с ретурном
Похожие вопросы
- Вопрос тем, кто хорошо знаком с рекурсией. Язык Си (но это второстепенно)...
- Стоит ли использовать рекурсию в целом? (+)
- Рекурсия, возникли проблемы с изучением рекурсии, не могли бы подсказать книги или видео про обьяснение рекурсии
- Ошибка в программе delphi. Рекурсия
- Подскажите практическую задачку на углубленное понимание что такое рекурсия?
- Сравнить 2 массива через рекурсию
- Задачка на Delphi, рекурсия...
- Рекурсия ф-ии
- Матрица M*N, состоящая из "0" и "1", найти наибольшую фигуру из единиц с помощью рекурсии. С++
- Как быть с многоразмерными массивами? Рекурсия?