Этот вопрос закрыт для ответов, так как повторяет вопрос Что не так в этой рекурсии?
@temirlan_official

Про рекурсию. Почему исключение?

крч у меня есть массив. мне нужно найти рекурсивно произведения его множителей. путём деления пополам массива. но рекурсивные вызовы должны остановиться если кусок массива с которым работаем состоит из одного или двух элементов.

int recursion(int* X, int N, int i, FILE* res)
	{
		if (N - i == 2) 
			return X[i] * X[i+1];

		if (N - i == 1)
			return X[i];

			int N1 = N/2;
			int i2 = N - N1 + 1;

			return (recursion(X, N1, i, res)*recursion(X, N, i2, res));
	}


fprintf(res, "%d", recursion(X, N, i, res)); вот так вывожу ответ

X- массив N - изначально длина массива

проблема в том что визуалка говорит что у меня исключение под строкой int recursion...
  • Вопрос задан
  • 191 просмотр
Ответы на вопрос 1
@Griglapidus
C++/Qt
В твоей реализации функции много лишних элементов которые сильно усложняют код.
Например FILE* res тебе в ней вообще не нужен.
От i так же можно отказаться.
По сути тебе нужен только указатель на первый элемент и количество элементов в массиве.
int recursion(int* x, int n)
{
    if(n > 2) {
        return recursion(x, n/2) * recursion(x + n/2, n - n/2);
    } else if(n ==2) {
        return x[0] * x[1];
    } else {
        return x[0];
    }
}

Деление массива на части происходит путём передачи 2 половинок предыдущего массива и их размеров.
На всякий случай обращу внимание. n - n/2 используется потому что происходит целочисленное деление и округление.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы